diff --git a/.github/workflows/build-firmware.yaml b/.github/workflows/build-firmware.yaml new file mode 100644 index 0000000000..2bcff4963f --- /dev/null +++ b/.github/workflows/build-firmware.yaml @@ -0,0 +1,101 @@ +name: Firmware CI + +on: [push,pull_request] + +jobs: + build: + runs-on: ubuntu-latest + + strategy: + # Let all builds finish even if one fails early + fail-fast: false + matrix: + # What boards should we build for? In the 'include' section below, + # set up what each of these boards needs to build. + build-target: [frankenso, frankenso-pal, mre-f4, mre-f7, prometheus-405, prometheus-469, proteus, kinetis] + build-type: [debug, release] + + include: + # Board configurations + - build-target: frankenso + efi-cpu: ARCH_STM32F4 + efi-board: st_stm32f4 + + - build-target: frankenso-pal + efi-cpu: ARCH_STM32F4 + efi-board: st_stm32f4 + target-extra-params: -DHAL_TRIGGER_USE_PAL=TRUE -DHAL_USE_ICU=FALSE -DEFI_VEHICLE_SPEED=FALSE -DEFI_LOGIC_ANALYZER=FALSE + + - build-target: mre-f4 + efi-cpu: ARCH_STM32F4 + efi-board: microrusefi + + - build-target: mre-f7 + efi-cpu: ARCH_STM32F7 + efi-board: microrusefi + + - build-target: prometheus-405 + efi-cpu: ARCH_STM32F4 + efi-board: prometheus/f405 + + - build-target: prometheus-469 + efi-cpu: ARCH_STM32F4 + efi-board: prometheus/f469 + + - build-target: proteus + efi-cpu: ARCH_STM32F7 + efi-board: proteus + + - build-target: kinetis + efi-cpu: kinetis + efi-board: kinetis + target-extra-params: -DCPU_MKE16F512VLH16 -DCPU_MKE16F512VLH16_cm4 -D__USE_CMSI -DDEFAULT_ENGINE_TYPE=MINIMAL_PINS + extra-options: USE_FATFS=no USE_BOOTLOADER=no + + # Debug vs. release configuration + - build-type: debug + type-extra-params: -DDUMMY + build-debug-level-opt: -O0 -ggdb -g3 + + - build-type: release + type-extra-params: -DEFI_ENABLE_ASSERTS=FALSE -DCH_DBG_ENABLE_TRACE=FALSE -DCH_DBG_ENABLE_ASSERTS=FALSE -DCH_DBG_ENABLE_STACK_CHECK=FALSE -DCH_DBG_FILL_THREADS=FALSE -DCH_DBG_THREADS_PROFILING=FALSE + build-debug-level-opt: -O2 -ggdb -g3 + + exclude: + - build-target: kinetis + build-type: debug + + steps: + - uses: actions/checkout@v1 + with: + fetch-depth: 1 + submodules: recursive + + # Build machines don't have arm-none-eabi gcc, so let's download it and put it on the path + - name: Download & Install GCC + run: | + wget 'https://developer.arm.com/-/media/Files/downloads/gnu-rm/9-2019q4/RC2.1/gcc-arm-none-eabi-9-2019-q4-major-x86_64-linux.tar.bz2?revision=6e63531f-8cb1-40b9-bbfc-8a57cdfc01b4&la=en&hash=F761343D43A0587E8AC0925B723C04DBFB848339' -O compiler.tar.bz2 + tar -xvf compiler.tar.bz2 + echo "::add-path::`pwd`/gcc-arm-none-eabi-9-2019-q4-major/bin" + + # Make sure the compiler we just downloaded works - just print out the version + - name: Test Compiler + run: arm-none-eabi-gcc -v + + # Build the firmware! + - name: Build Firmware + working-directory: ./firmware/ + run: make -j4 PROJECT_BOARD=${{matrix.efi-board}} PROJECT_CPU=${{matrix.efi-cpu}} EXTRA_PARAMS="${{matrix.type-extra-params}} ${{matrix.target-extra-params}}" DEBUG_LEVEL_OPT='${{matrix.build-debug-level-opt}}' ${{matrix.extra-options}} + + # The next two steps upload the bin and elf as build artifacts + - name: Upload elf + uses: actions/upload-artifact@v1 + with: + name: firmware-${{matrix.build-target}}-${{matrix.build-type}}-elf + path: ./firmware/build/rusefi.elf + + - name: Upload bin + uses: actions/upload-artifact@v1 + with: + name: firmware-${{matrix.build-target}}-${{matrix.build-type}}-bin + path: ./firmware/build/rusefi.bin diff --git a/.github/workflows/build-simulator.yaml b/.github/workflows/build-simulator.yaml new file mode 100644 index 0000000000..1399b05af4 --- /dev/null +++ b/.github/workflows/build-simulator.yaml @@ -0,0 +1,21 @@ +name: Simulator CI + +on: [push,pull_request] + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - name: Install Simulator Deps + run: sudo apt-get update && sudo apt-get install -y gcc-multilib g++-multilib + + - uses: actions/checkout@v1 + with: + fetch-depth: 1 + submodules: recursive + + - name: Build Simulator + working-directory: ./simulator/ + run: make -j4 diff --git a/.github/workflows/build-unit-tests.yaml b/.github/workflows/build-unit-tests.yaml index fe82baca21..98d6dfea7c 100644 --- a/.github/workflows/build-unit-tests.yaml +++ b/.github/workflows/build-unit-tests.yaml @@ -1,6 +1,6 @@ -name: unit test ci +name: Unit Test CI -on: [push] +on: [push,pull_request] jobs: build: diff --git a/firmware/Makefile b/firmware/Makefile index c3b183e1fb..d4b4afdcba 100644 --- a/firmware/Makefile +++ b/firmware/Makefile @@ -7,6 +7,8 @@ CHIBIOS = ChibiOS RULESPATH = $(CHIBIOS)/os/common/startup/ARMCMx/compilers/GCC RULESFILE = $(RULESPATH)/rules.mk +include rusefi_rules.mk + # Define project name here PROJECT = rusefi PROJECT_DIR = . @@ -35,9 +37,12 @@ endif # Compiler options here. ifeq ($(USE_OPT),) - USE_OPT = $(EXTRA_PARAMS) $(DEBUG_LEVEL_OPT) $(RFLAGS) -Wno-error=implicit-fallthrough -Wno-error=bool-operation -fomit-frame-pointer -falign-functions=16 -Werror -Wno-error=pointer-sign -Wno-error=unused-function -Wno-error=unused-variable -Wno-error=sign-compare -Wno-error=unused-parameter -Werror=missing-field-initializers -Werror=type-limits -Wno-error=strict-aliasing -Wno-error=attributes + USE_OPT = $(EXTRA_PARAMS) $(DEBUG_LEVEL_OPT) $(RFLAGS) -Wno-error=implicit-fallthrough -Wno-error=bool-operation -fomit-frame-pointer -falign-functions=16 -Werror=type-limits -Wno-error=strict-aliasing -Wno-error=attributes endif + +USE_OPT += $(RUSEFI_OPT) + # C specific options here (added to USE_OPT). ifeq ($(USE_COPT),) USE_COPT = -fgnu89-inline -std=gnu99 -Werror-implicit-function-declaration @@ -150,13 +155,7 @@ endif include $(PROJECT_DIR)/config/boards/$(PROJECT_BOARD)/board.mk include $(PROJECT_DIR)/config/engines/engines.mk include $(PROJECT_DIR)/console/console.mk -include $(PROJECT_DIR)/controllers/algo/algo.mk include $(PROJECT_DIR)/controllers/controllers.mk -include $(PROJECT_DIR)/controllers/core/core.mk -include $(PROJECT_DIR)/controllers/math/math.mk -include $(PROJECT_DIR)/controllers/sensors/sensors.mk -include $(PROJECT_DIR)/controllers/system/system.mk -include $(PROJECT_DIR)/controllers/trigger/trigger.mk include $(PROJECT_DIR)/development/development.mk include $(PROJECT_DIR)/hw_layer/hw_layer.mk include $(PROJECT_DIR)/hw_layer/drivers/drivers.mk @@ -303,9 +302,7 @@ INCDIR = $(CHIBIOS)/os/license \ $(DEVELOPMENT_DIR) \ development/hw_layer \ development/test \ - $(CONTROLLERS_INC) \ - controllers/sensors \ - controllers/sensors/converters + $(CONTROLLERS_INC) # # Project, sources and paths diff --git a/firmware/bootloader/!compile_bootloader_405.bat b/firmware/bootloader/!compile_bootloader_405.bat index 954452daae..22ce79292f 100644 --- a/firmware/bootloader/!compile_bootloader_405.bat +++ b/firmware/bootloader/!compile_bootloader_405.bat @@ -4,7 +4,7 @@ echo Starting compilation for Prometheus-405 set PROJECT_BOARD=Prometheus set PROMETHEUS_BOARD=405 -set EXTRA_PARAMS=-DDUMMY -DEFI_BOOTLOADER -DSTM32F405xx -DEFI_ENABLE_ASSERTS=FALSE -DCH_DBG_ENABLE_CHECKS=FALSE -DCH_DBG_ENABLE_TRACE=FALSE -DCH_DBG_ENABLE_ASSERTS=FALSE -DCH_DBG_ENABLE_STACK_CHECK=FALSE -DCH_DBG_FILL_THREADS=FALSE ^ +set EXTRA_PARAMS=-DDUMMY -DEFI_BOOTLOADER -DSTM32F405xx -DEFI_ENABLE_ASSERTS=FALSE -DCH_DBG_ENABLE_CHECKS=FALSE -DCH_DBG_ENABLE_ASSERTS=FALSE -DCH_DBG_ENABLE_STACK_CHECK=FALSE -DCH_DBG_FILL_THREADS=FALSE ^ -DBOARD_TLE8888_COUNT=0 ^ -DBOARD_TLE6240_COUNT=0 ^ -DBOARD_MC33972_COUNT=0 ^ diff --git a/firmware/bootloader/!compile_bootloader_469.bat b/firmware/bootloader/!compile_bootloader_469.bat index 2d23879dc4..c4c08cb06e 100644 --- a/firmware/bootloader/!compile_bootloader_469.bat +++ b/firmware/bootloader/!compile_bootloader_469.bat @@ -4,7 +4,7 @@ echo Starting compilation for Prometheus-469 set PROJECT_BOARD=Prometheus set PROMETHEUS_BOARD=469 -set EXTRA_PARAMS=-DDUMMY -DEFI_BOOTLOADER -DSTM32F469xx -DEFI_ENABLE_ASSERTS=FALSE -DCH_DBG_ENABLE_CHECKS=FALSE -DCH_DBG_ENABLE_TRACE=FALSE -DCH_DBG_ENABLE_ASSERTS=FALSE -DCH_DBG_ENABLE_STACK_CHECK=FALSE -DCH_DBG_FILL_THREADS=FALSE ^ +set EXTRA_PARAMS=-DDUMMY -DEFI_BOOTLOADER -DSTM32F469xx -DEFI_ENABLE_ASSERTS=FALSE -DCH_DBG_ENABLE_CHECKS=FALSE -DCH_DBG_ENABLE_ASSERTS=FALSE -DCH_DBG_ENABLE_STACK_CHECK=FALSE -DCH_DBG_FILL_THREADS=FALSE ^ -DBOARD_TLE8888_COUNT=0 ^ -DBOARD_TLE6240_COUNT=0 ^ -DBOARD_MC33972_COUNT=0 ^ diff --git a/firmware/bootloader/!compile_bootloader_discovery407.bat b/firmware/bootloader/!compile_bootloader_discovery407.bat index 9f26200296..036c988e62 100644 --- a/firmware/bootloader/!compile_bootloader_discovery407.bat +++ b/firmware/bootloader/!compile_bootloader_discovery407.bat @@ -4,7 +4,7 @@ echo Starting compilation for Discovery-407 rem set PROJECT_BOARD=Prometheus rem set PROMETHEUS_BOARD=405 -rem set EXTRA_PARAMS=-DDUMMY -DSTM32F405xx -DEFI_ENABLE_ASSERTS=FALSE -DCH_DBG_ENABLE_CHECKS=FALSE -DCH_DBG_ENABLE_TRACE=FALSE -DCH_DBG_ENABLE_ASSERTS=FALSE -DCH_DBG_ENABLE_STACK_CHECK=FALSE -DCH_DBG_FILL_THREADS=FALSE -DCH_DBG_THREADS_PROFILING=FALSE +rem set EXTRA_PARAMS=-DDUMMY -DSTM32F405xx -DEFI_ENABLE_ASSERTS=FALSE -DCH_DBG_ENABLE_CHECKS=FALSE -DCH_DBG_ENABLE_ASSERTS=FALSE -DCH_DBG_ENABLE_STACK_CHECK=FALSE -DCH_DBG_FILL_THREADS=FALSE -DCH_DBG_THREADS_PROFILING=FALSE set EXTRA_PARAMS=-DDUMMY -DEFI_BOOTLOADER ^ -DCH_DBG_ENABLE_STACK_CHECK=FALSE ^ -DBOARD_TLE8888_COUNT=0 ^ diff --git a/firmware/bootloader/src/Makefile b/firmware/bootloader/src/Makefile index e14e79c18c..3d26e4a3ca 100644 --- a/firmware/bootloader/src/Makefile +++ b/firmware/bootloader/src/Makefile @@ -9,7 +9,7 @@ ifeq ($(DEBUG_LEVEL_OPT),) # this value would be used by default. For 'debug' configuration override with '-O0 -ggdb -g3' or something along these lines DEBUG_LEVEL_OPT = -O2 - DDEFS += -DEFI_ENABLE_ASSERTS=FALSE -DCH_DBG_ENABLE_TRACE=FALSE -DCH_DBG_ENABLE_ASSERTS=FALSE -DCH_DBG_ENABLE_STACK_CHECK=FALSE -DCH_DBG_FILL_THREADS=FALSE -DCH_DBG_THREADS_PROFILING=FALSE + DDEFS += -DEFI_ENABLE_ASSERTS=FALSE -DCH_DBG_ENABLE_ASSERTS=FALSE -DCH_DBG_ENABLE_STACK_CHECK=FALSE -DCH_DBG_FILL_THREADS=FALSE -DCH_DBG_THREADS_PROFILING=FALSE endif # disable some modules to shrink bootloader binary @@ -156,34 +156,22 @@ CSRC = $(STARTUPSRC) \ $(CHIBIOS)/os/various/syscalls.c \ $(CHIBIOS)/os/hal/lib/streams/memstreams.c \ $(CHIBIOS)/os/hal/lib/streams/chprintf.c \ - $(ENGINES_SRC) \ $(CONSOLESRC) \ $(DEV_SRC) \ $(HW_LAYER_EMS) \ $(HW_LAYER_DRIVERS_CORE) \ - $(CONTROLLERS_ALGO_SRC) \ - $(CONTROLLERS_CORE_SRC) \ - $(CONTROLLERS_SENSORS_SRC) \ $(FATFSSRC) \ $(SYSTEMSRC) \ # C++ sources that can be compiled in ARM or THUMB mode depending on the global # setting. CPPSRC = $(CHCPPSRC) \ - $(TRIGGER_SRC_CPP) \ - $(TRIGGER_DECODERS_SRC_CPP) \ $(DEV_SRC_CPP) \ - $(CONTROLLERS_ALGO_SRC_CPP) \ - $(SYSTEMSRC_CPP) \ $(BOARDSRC_CPP) \ - $(ENGINES_SRC_CPP) \ $(HW_LAYER_EMS_CPP) \ $(HW_SENSORS_SRC) \ $(TUNERSTUDIO_SRC_CPP) \ $(CONSOLE_SRC_CPP) \ - $(CONTROLLERS_SENSORS_SRC_CPP) \ - $(CONTROLLERS_CORE_SRC_CPP) \ - $(CONTROLLERS_MATH_SRC_CPP) \ $(PROJECT_DIR)/console/binary/tunerstudio_io.cpp \ $(PROJECT_DIR)/controllers/system/efi_gpio.cpp \ $(PROJECT_DIR)/controllers/algo/engine_configuration.cpp \ diff --git a/firmware/bootloader/src/rusefi_stubs.cpp b/firmware/bootloader/src/rusefi_stubs.cpp index f62657d8b9..5c455eacea 100644 --- a/firmware/bootloader/src/rusefi_stubs.cpp +++ b/firmware/bootloader/src/rusefi_stubs.cpp @@ -31,8 +31,8 @@ LoggingWithStorage::LoggingWithStorage(const char *name) : Logging(name, DEFAULT // this is supposed to be taken from chconf_common.h but it does not work? I am not sure why :( // TODO: make this be defined by chconf_common.h? -#if ! ENABLE_PERF_TRACE -//void irqEnterHook() {} -//void irqExitHook() {} -//void contextSwitchHook() {} -#endif /* ENABLE_PERF_TRACE */ \ No newline at end of file +//#if ! ENABLE_PERF_TRACE +void irqEnterHook() {} +void irqExitHook() {} +void contextSwitchHook() {} +//#endif /* ENABLE_PERF_TRACE */ \ No newline at end of file diff --git a/firmware/clean_compile_two_versions.bat b/firmware/clean_compile_two_versions.bat index f4842d4017..82753651af 100644 --- a/firmware/clean_compile_two_versions.bat +++ b/firmware/clean_compile_two_versions.bat @@ -7,7 +7,7 @@ mkdir deliver call clean.bat echo "TIMESTAMP %date% %time%" -set EXTRA_PARAMS=-DDUMMY -DFIRMWARE_ID=\"default_no_assert\" -DEFI_ENABLE_ASSERTS=FALSE -DCH_DBG_ENABLE_TRACE=FALSE -DCH_DBG_ENABLE_ASSERTS=FALSE -DCH_DBG_ENABLE_STACK_CHECK=FALSE -DCH_DBG_FILL_THREADS=FALSE -DCH_DBG_THREADS_PROFILING=FALSE +set EXTRA_PARAMS=-DDUMMY -DFIRMWARE_ID=\"default_no_assert\" -DEFI_ENABLE_ASSERTS=FALSE -DCH_DBG_ENABLE_ASSERTS=FALSE -DCH_DBG_ENABLE_STACK_CHECK=FALSE -DCH_DBG_FILL_THREADS=FALSE -DCH_DBG_THREADS_PROFILING=FALSE make -j4 DEBUG_LEVEL_OPT='-O2' set EXTRA_PARAMS= diff --git a/firmware/config/boards/clean_env_variables.bat b/firmware/config/boards/clean_env_variables.bat index ff18965ae7..d0dba99e47 100644 --- a/firmware/config/boards/clean_env_variables.bat +++ b/firmware/config/boards/clean_env_variables.bat @@ -7,3 +7,7 @@ set PROJECT_CPU= set USE_BOOTLOADER= set DEFAULT_ENGINE_TYPE= set EFI_FATAL_ERROR_PIN= +set BUILDDIR= +set DEBUG_LEVEL_OPT= +set USE_FATFS= + diff --git a/firmware/config/boards/common_make.bat b/firmware/config/boards/common_make.bat index 6e0a947eaf..3af123cbb1 100644 --- a/firmware/config/boards/common_make.bat +++ b/firmware/config/boards/common_make.bat @@ -15,4 +15,6 @@ echo %script_name%: invoking hex2dfu.exe cp build/rusefi.bin deliver/ echo %script_name%: deliver folder -ls -l deliver \ No newline at end of file +ls -l deliver + +call config/boards/clean_env_variables.bat \ No newline at end of file diff --git a/firmware/config/boards/frankenso/!compile-frankenso-pal.bat b/firmware/config/boards/frankenso/!compile-frankenso-pal.bat new file mode 100644 index 0000000000..d8d08c6178 --- /dev/null +++ b/firmware/config/boards/frankenso/!compile-frankenso-pal.bat @@ -0,0 +1,13 @@ + +cd ../../.. + +set EXTRA_PARAMS=-DDUMMY ^ + -DHAL_TRIGGER_USE_PAL=TRUE ^ + -DEFI_VEHICLE_SPEED=FALSE ^ + -DHAL_USE_ICU=FALSE ^ + -DEFI_LOGIC_ANALYZER=FALSE ^ + -DDEFAULT_ENGINE_TYPE=MIATA_NA6_VAF ^ + -DFIRMWARE_ID=\"frankensoNA6\" + +call config/boards/common_make.bat + diff --git a/firmware/config/boards/frankenso/!compile-frankenso_na6.bat b/firmware/config/boards/frankenso/!compile-frankenso_na6.bat index 78b9086d01..61820cca1e 100644 --- a/firmware/config/boards/frankenso/!compile-frankenso_na6.bat +++ b/firmware/config/boards/frankenso/!compile-frankenso_na6.bat @@ -7,4 +7,3 @@ set EXTRA_PARAMS=-DDUMMY ^ call config/boards/common_make.bat -call config/boards/clean_env_variables.bat diff --git a/firmware/config/boards/kinetis/!compile-kinetis.bat b/firmware/config/boards/kinetis/!compile-kinetis.bat index 8bbdfc630a..5ff5d0d973 100644 --- a/firmware/config/boards/kinetis/!compile-kinetis.bat +++ b/firmware/config/boards/kinetis/!compile-kinetis.bat @@ -2,10 +2,10 @@ echo "Compiling for Kinetis MKE16F512" rem TODO: somehow this -DDUMMY is helping us to not mess up the parameters, why?! rem https://github.com/rusefi/rusefi/issues/684 set EXTRA_PARAMS=-DDUMMY -DCPU_MKE16F512VLH16 -DCPU_MKE16F512VLH16_cm4 -D__USE_CMSIS^ - -DEFI_ENABLE_ASSERTS=FALSE -DCH_DBG_ENABLE_CHECKS=FALSE -DCH_DBG_ENABLE_TRACE=FALSE -DCH_DBG_ENABLE_ASSERTS=FALSE -DCH_DBG_ENABLE_STACK_CHECK=FALSE -DCH_DBG_FILL_THREADS=FALSE -DCH_DBG_THREADS_PROFILING=FALSE^ - -DFIRMWARE_ID=\"kinetis\" ^ + -DEFI_ENABLE_ASSERTS=FALSE -DCH_DBG_ENABLE_CHECKS=FALSE -DCH_DBG_ENABLE_ASSERTS=FALSE -DCH_DBG_ENABLE_STACK_CHECK=FALSE -DCH_DBG_FILL_THREADS=FALSE -DCH_DBG_THREADS_PROFILING=FALSE^ -DDEFAULT_ENGINE_TYPE=MINIMAL_PINS -set BUILDDIR=build_kinetis +rem set BUILDDIR=build_kinetis +set BUILDDIR=build set PROJECT_BOARD=kinetis set PROJECT_CPU=kinetis set DEBUG_LEVEL_OPT="-O2" @@ -15,9 +15,8 @@ rem -DCH_DBG_ENABLE_CHECKS=FALSE cd ../../.. -rm -f build_kinetis/rusefi_kinetis.* +rem rm -f ${BUILDDIR}/rusefi_kinetis.* -make -r -j4 2> err.log -rem rm -f build/rusefi.dfu -rem dir build -rem ..\misc\hex2dfu\HEX2DFU.exe build/rusefi.hex -out build/rusefi.dfu +rem make -r -j4 + +call config/boards/common_make.bat diff --git a/firmware/config/boards/kinetis/OS/os/hal/ports/KINETIS/LLD/COMPv2/hal_comp_lld.c b/firmware/config/boards/kinetis/OS/os/hal/ports/KINETIS/LLD/COMPv2/hal_comp_lld.c index aca7b09e84..72cb80e3c5 100644 --- a/firmware/config/boards/kinetis/OS/os/hal/ports/KINETIS/LLD/COMPv2/hal_comp_lld.c +++ b/firmware/config/boards/kinetis/OS/os/hal/ports/KINETIS/LLD/COMPv2/hal_comp_lld.c @@ -112,8 +112,12 @@ void comp_lld_init(void) { static void comp_lld_irq_handler(COMPDriver *compp) { if (compp->config->cb != NULL) compp->config->cb(compp); - // clear flags to continue - ACMP_ClearStatusFlags(compp->reg, kACMP_OutputRisingEventFlag | kACMP_OutputFallingEventFlag); + + /* Add for ARM errata 838869, affects Cortex-M4, Cortex-M4F Store immediate overlapping + exception return operation might vector to incorrect interrupt */ +#if defined __CORTEX_M && (__CORTEX_M == 4U) + __DSB(); +#endif } /** @@ -156,9 +160,10 @@ OSAL_IRQ_HANDLER(KINETIS_COMP2_IRQ_VECTOR) { void comp_lld_channel_enable(COMPDriver *compp, uint32_t channel) { osalDbgAssert(channel <= 7, "invalid channel number"); memset(&compp->acmpChannelCfg, 0, sizeof(compp->acmpChannelCfg)); - compp->acmpChannelCfg.positivePortInput = kACMP_PortInputFromDAC; - compp->acmpChannelCfg.negativePortInput = kACMP_PortInputFromMux; - compp->acmpChannelCfg.minusMuxInput = channel; + compp->acmpChannelCfg.positivePortInput = kACMP_PortInputFromMux; + compp->acmpChannelCfg.plusMuxInput = channel; + compp->acmpChannelCfg.negativePortInput = kACMP_PortInputFromDAC; + compp->acmpChannelCfg.minusMuxInput = 0U; ACMP_SetChannelConfig(compp->reg, &compp->acmpChannelCfg); } @@ -183,8 +188,6 @@ void comp_lld_channel_disable(COMPDriver *compp, uint32_t channel) { * @notapi */ void comp_lld_set_dac_value(COMPDriver *compp, uint32_t value) { - memset(&compp->acmpDacCfg, 0, sizeof(compp->acmpDacCfg)); - compp->acmpDacCfg.referenceVoltageSource = kACMP_VrefSourceVin1; // connected to VDDA on KE1xF compp->acmpDacCfg.DACValue = value; ACMP_SetDACConfig(compp->reg, &compp->acmpDacCfg); } @@ -200,8 +203,23 @@ void comp_lld_start(COMPDriver *compp) { ACMP_GetDefaultConfig(&compp->acmpCfg); if (compp->config->output_mode == COMP_OUTPUT_INVERTED) compp->acmpCfg.enableInvertOutput = true; + compp->acmpCfg.enableHighSpeed = true; + compp->acmpCfg.useUnfilteredOutput = true; //false; + compp->acmpCfg.hysteresisMode = kACMP_HysteresisLevel2; // L1=~16mV, L2=~32mV + ACMP_Init(compp->reg, &compp->acmpCfg); compp->irq_mask = 0; + +#if 0 + acmp_filter_config_t filterCfg = { 0 }; + filterCfg.filterCount = 2U; + filterCfg.filterPeriod = 2U; + filterCfg.enableSample = false; + ACMP_SetFilterConfig(compp->reg, &filterCfg); +#endif + + memset(&compp->acmpDacCfg, 0, sizeof(compp->acmpDacCfg)); + compp->acmpDacCfg.referenceVoltageSource = kACMP_VrefSourceVin1; // connected to VDDA on KE1xF } /** @@ -249,7 +267,10 @@ void comp_lld_disable(COMPDriver *compp) { } uint32_t comp_lld_get_status(COMPDriver *compp) { - return ACMP_GetStatusFlags(compp->reg); + uint32_t status = ACMP_GetStatusFlags(compp->reg); + // clear flags to continue + ACMP_ClearStatusFlags(compp->reg, status); + return status; } #endif /* HAL_USE_COMP */ diff --git a/firmware/config/boards/kinetis/board.mk b/firmware/config/boards/kinetis/board.mk index 2f84d106a7..3819b9f90e 100644 --- a/firmware/config/boards/kinetis/board.mk +++ b/firmware/config/boards/kinetis/board.mk @@ -20,4 +20,4 @@ PLATFORMINC += $(PLATFORMINC_CONTRIB) # Using external ChibiOS-Contrib code for Comparator HAL HALSRC += $(CHIBIOS_CONTRIB)/os/hal/src/hal_comp.c -HW_LAYER_EMS_CPP += $(PROJECT_DIR)/hw_layer/trigger_input_comp.cpp + diff --git a/firmware/config/boards/kinetis/chconf.h b/firmware/config/boards/kinetis/chconf.h index 4e2c8fe29c..693e73d42b 100644 --- a/firmware/config/boards/kinetis/chconf.h +++ b/firmware/config/boards/kinetis/chconf.h @@ -609,7 +609,7 @@ extern "C" * @note The default is @p FALSE. */ #ifndef CH_DBG_ENABLE_TRACE -#define CH_DBG_ENABLE_TRACE TRUE +#define CH_DBG_ENABLE_TRACE FALSE #endif /** @@ -823,6 +823,9 @@ void chDbgPanic3(const char *msg, const char * file, int line); } \ } while (false) +#define ENABLE_PERF_TRACE FALSE +#define TRACE_BUFFER_LENGTH 1 + #endif /* CHCONF_H */ /** @} */ diff --git a/firmware/config/boards/kinetis/config.mk b/firmware/config/boards/kinetis/config.mk index 7d720b8766..f0e811d791 100644 --- a/firmware/config/boards/kinetis/config.mk +++ b/firmware/config/boards/kinetis/config.mk @@ -12,4 +12,4 @@ CPU_HWLAYER = ports/kinetis GENERATED_ENUMS_DIR = $(BOARD_DIR)/config/controllers/algo -EXTRA_PARAMS += -nodefaultlibs -L$(PROJECT_DIR)/config/boards/$(PROJECT_BOARD)/libc -lgcc -ltinyc +EXTRA_PARAMS += -DFIRMWARE_ID=\"kinetis\" -nodefaultlibs -L$(PROJECT_DIR)/config/boards/$(PROJECT_BOARD)/libc -lgcc -ltinyc diff --git a/firmware/config/boards/kinetis/config/!gen_config.bat b/firmware/config/boards/kinetis/config/!gen_config.bat index c95ae10e3a..b0f6b90c8f 100644 --- a/firmware/config/boards/kinetis/config/!gen_config.bat +++ b/firmware/config/boards/kinetis/config/!gen_config.bat @@ -21,9 +21,12 @@ mkdir build_kinetis java ^ -DSystemOut.name=gen_config ^ + -Drusefi.generator.lazyfile.enabled=true ^ -jar ../java_tools/ConfigDefinition.jar ^ -definition integration/rusefi_config.txt ^ -ts_destination tunerstudio ^ + -with_c_defines false ^ + -initialize_to_zero false ^ -ts_output_name rusefi_kinetis.ini ^ -c_defines config/boards/kinetis/config/controllers/algo/rusefi_generated.h ^ -c_destination config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h ^ 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 e2bebea099..b462a65b13 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 @@ -627,6 +627,8 @@ case NISSAN_PRIMERA: return "NISSAN_PRIMERA"; case PROMETHEUS_DEFAULTS: return "PROMETHEUS_DEFAULTS"; +case PROTEUS: + return "PROTEUS"; case ROVER_V8: return "ROVER_V8"; case SACHS: @@ -861,6 +863,8 @@ case SC_DETAILED_RPM: return "SC_DETAILED_RPM"; case SC_MAP: return "SC_MAP"; +case SC_AUX_FAST1: + return "SC_AUX_FAST1"; case SC_OFF: return "SC_OFF"; case SC_RPM_ACCEL: 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 2b1b529fbb..845efa0091 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,2099 +1,43 @@ -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Tue Nov 19 09:23:08 EST 2019 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Sun Dec 08 00:34:54 EST 2019 // by class com.rusefi.output.CHeaderConsumer // begin #ifndef CONFIG_BOARDS_KINETIS_CONFIG_CONTROLLERS_ALGO_ENGINE_CONFIGURATION_GENERATED_STRUCTURES_H #define CONFIG_BOARDS_KINETIS_CONFIG_CONTROLLERS_ALGO_ENGINE_CONFIGURATION_GENERATED_STRUCTURES_H #include "rusefi_types.h" -#define absoluteFuelPressure_offset 76 -#define absoluteFuelPressure_offset_hex 4c -#define accelerometerSpiDevice_offset 2712 -#define accelerometerSpiDevice_offset_hex a98 -#define acCutoffHighRpm_offset 1494 -#define acCutoffHighRpm_offset_hex 5d6 -#define acCutoffLowRpm_offset 1492 -#define acCutoffLowRpm_offset_hex 5d4 -#define acIdleRpmBump_offset 1496 -#define acIdleRpmBump_offset_hex 5d8 -#define acRelayPin_offset 830 -#define acRelayPin_offset_hex 33e -#define acRelayPinMode_offset 831 -#define acRelayPinMode_offset_hex 33f -#define acSwitchAdc_offset 1469 -#define acSwitchAdc_offset_hex 5bd -#define activateAuxPid1_offset 76 -#define activateAuxPid1_offset_hex 4c -#define activateAuxPid2_offset 76 -#define activateAuxPid2_offset_hex 4c -#define activateAuxPid3_offset 76 -#define activateAuxPid3_offset_hex 4c -#define activateAuxPid4_offset 76 -#define activateAuxPid4_offset_hex 4c -#define adc_channel_e_enum "PA2", "PA3", "INVALID", "PD3", "INVALID", "INVALID", "INVALID", "PB12", "PB13", "INVALID", "PE2", "INVALID", "PC14", "PC15", "PC16", "PC17", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" -#define adcVcc_offset 548 -#define adcVcc_offset_hex 224 -#define afr_alignAf_offset 561 -#define afr_alignAf_offset_hex 231 -#define afr_hwChannel_offset 560 -#define afr_hwChannel_offset_hex 230 -#define afr_offset 560 -#define afr_offset_hex 230 -#define afr_type_offset 692 -#define afr_type_offset_hex 2b4 -#define afr_v1_offset 564 -#define afr_v1_offset_hex 234 -#define afr_v2_offset 572 -#define afr_v2_offset_hex 23c -#define afr_value1_offset 568 -#define afr_value1_offset_hex 238 -#define afr_value2_offset 576 -#define afr_value2_offset_hex 240 -#define afrLoadBins_offset 18848 -#define afrLoadBins_offset_hex 49a0 -#define afrRpmBins_offset 18912 -#define afrRpmBins_offset_hex 49e0 -#define afrTable_offset 18592 -#define afrTable_offset_hex 48a0 -#define afterCrankingIACtaperDuration_offset 2036 -#define afterCrankingIACtaperDuration_offset_hex 7f4 -#define alFIn_offset 4024 -#define alFIn_offset_hex fb8 -#define alignEngineSnifferAtTDC_offset 744 -#define alignEngineSnifferAtTDC_offset_hex 2e8 -#define alternator_antiwindupFreq_offset 1764 -#define alternator_antiwindupFreq_offset_hex 6e4 -#define alternator_derivativeFilterLoss_offset 1760 -#define alternator_derivativeFilterLoss_offset_hex 6e0 -#define alternatorControl_dFactor_offset 1724 -#define alternatorControl_dFactor_offset_hex 6bc -#define alternatorControl_iFactor_offset 1720 -#define alternatorControl_iFactor_offset_hex 6b8 -#define alternatorControl_maxValue_offset 1734 -#define alternatorControl_maxValue_offset_hex 6c6 -#define alternatorControl_minValue_offset 1732 -#define alternatorControl_minValue_offset_hex 6c4 -#define alternatorControl_offset 1716 -#define alternatorControl_offset_hex 6b4 -#define alternatorControl_offset_offset 1728 -#define alternatorControl_offset_offset_hex 6c0 -#define alternatorControl_periodMs_offset 1730 -#define alternatorControl_periodMs_offset_hex 6c2 -#define alternatorControl_pFactor_offset 1716 -#define alternatorControl_pFactor_offset_hex 6b4 -#define alternatorControlPin_offset 665 -#define alternatorControlPin_offset_hex 299 -#define alternatorControlPinMode_offset 666 -#define alternatorControlPinMode_offset_hex 29a -#define alternatorOffAboveTps_offset 2028 -#define alternatorOffAboveTps_offset_hex 7ec -#define alternatorPwmFrequency_offset 2256 -#define alternatorPwmFrequency_offset_hex 8d0 -#define ambiguousOperationMode_offset 488 -#define ambiguousOperationMode_offset_hex 1e8 -#define analogInputDividerCoefficient_offset 460 -#define analogInputDividerCoefficient_offset_hex 1cc -#define autoTuneCltThreshold_offset 2420 -#define autoTuneCltThreshold_offset_hex 974 -#define autoTuneTpsQuietPeriod_offset 2428 -#define autoTuneTpsQuietPeriod_offset_hex 97c -#define autoTuneTpsRocThreshold_offset 2424 -#define autoTuneTpsRocThreshold_offset_hex 978 -#define AUX_DIGITAL_VALVE_COUNT 2 -#define AUX_PID_COUNT 4 -#define auxPid1_dFactor_offset 2620 -#define auxPid1_dFactor_offset_hex a3c -#define auxPid1_iFactor_offset 2616 -#define auxPid1_iFactor_offset_hex a38 -#define auxPid1_maxValue_offset 2630 -#define auxPid1_maxValue_offset_hex a46 -#define auxPid1_minValue_offset 2628 -#define auxPid1_minValue_offset_hex a44 -#define auxPid1_offset 2612 -#define auxPid1_offset_hex a34 -#define auxPid1_offset_offset 2624 -#define auxPid1_offset_offset_hex a40 -#define auxPid1_periodMs_offset 2626 -#define auxPid1_periodMs_offset_hex a42 -#define auxPid1_pFactor_offset 2612 -#define auxPid1_pFactor_offset_hex a34 -#define auxPid2_dFactor_offset 2640 -#define auxPid2_dFactor_offset_hex a50 -#define auxPid2_iFactor_offset 2636 -#define auxPid2_iFactor_offset_hex a4c -#define auxPid2_maxValue_offset 2650 -#define auxPid2_maxValue_offset_hex a5a -#define auxPid2_minValue_offset 2648 -#define auxPid2_minValue_offset_hex a58 -#define auxPid2_offset 2632 -#define auxPid2_offset_hex a48 -#define auxPid2_offset_offset 2644 -#define auxPid2_offset_offset_hex a54 -#define auxPid2_periodMs_offset 2646 -#define auxPid2_periodMs_offset_hex a56 -#define auxPid2_pFactor_offset 2632 -#define auxPid2_pFactor_offset_hex a48 -#define auxPid3_dFactor_offset 2660 -#define auxPid3_dFactor_offset_hex a64 -#define auxPid3_iFactor_offset 2656 -#define auxPid3_iFactor_offset_hex a60 -#define auxPid3_maxValue_offset 2670 -#define auxPid3_maxValue_offset_hex a6e -#define auxPid3_minValue_offset 2668 -#define auxPid3_minValue_offset_hex a6c -#define auxPid3_offset 2652 -#define auxPid3_offset_hex a5c -#define auxPid3_offset_offset 2664 -#define auxPid3_offset_offset_hex a68 -#define auxPid3_periodMs_offset 2666 -#define auxPid3_periodMs_offset_hex a6a -#define auxPid3_pFactor_offset 2652 -#define auxPid3_pFactor_offset_hex a5c -#define auxPid4_dFactor_offset 2680 -#define auxPid4_dFactor_offset_hex a78 -#define auxPid4_iFactor_offset 2676 -#define auxPid4_iFactor_offset_hex a74 -#define auxPid4_maxValue_offset 2690 -#define auxPid4_maxValue_offset_hex a82 -#define auxPid4_minValue_offset 2688 -#define auxPid4_minValue_offset_hex a80 -#define auxPid4_offset 2672 -#define auxPid4_offset_hex a70 -#define auxPid4_offset_offset 2684 -#define auxPid4_offset_offset_hex a7c -#define auxPid4_periodMs_offset 2686 -#define auxPid4_periodMs_offset_hex a7e -#define auxPid4_pFactor_offset 2672 -#define auxPid4_pFactor_offset_hex a70 -#define auxPidFrequency1_offset 2248 -#define auxPidFrequency1_offset_hex 8c8 -#define auxPidFrequency2_offset 2250 -#define auxPidFrequency2_offset_hex 8ca -#define auxPidFrequency3_offset 2252 -#define auxPidFrequency3_offset_hex 8cc -#define auxPidFrequency4_offset 2254 -#define auxPidFrequency4_offset_hex 8ce -#define auxPidPins1_offset 2220 -#define auxPidPins1_offset_hex 8ac -#define auxPidPins2_offset 2221 -#define auxPidPins2_offset_hex 8ad -#define auxPidPins3_offset 2222 -#define auxPidPins3_offset_hex 8ae -#define auxPidPins4_offset 2223 -#define auxPidPins4_offset_hex 8af -#define auxTempSensor1_adcChannel_offset 2472 -#define auxTempSensor1_adcChannel_offset_hex 9a8 -#define auxTempSensor1_alignmentFill_offset 2473 -#define auxTempSensor1_alignmentFill_offset_hex 9a9 -#define auxTempSensor1_bias_resistor_offset 2468 -#define auxTempSensor1_bias_resistor_offset_hex 9a4 -#define auxTempSensor1_config_offset 2444 -#define auxTempSensor1_config_offset_hex 98c -#define auxTempSensor1_offset 2444 -#define auxTempSensor1_offset_hex 98c -#define auxTempSensor1_resistance_1_offset 2456 -#define auxTempSensor1_resistance_1_offset_hex 998 -#define auxTempSensor1_resistance_2_offset 2460 -#define auxTempSensor1_resistance_2_offset_hex 99c -#define auxTempSensor1_resistance_3_offset 2464 -#define auxTempSensor1_resistance_3_offset_hex 9a0 -#define auxTempSensor1_tempC_1_offset 2444 -#define auxTempSensor1_tempC_1_offset_hex 98c -#define auxTempSensor1_tempC_2_offset 2448 -#define auxTempSensor1_tempC_2_offset_hex 990 -#define auxTempSensor1_tempC_3_offset 2452 -#define auxTempSensor1_tempC_3_offset_hex 994 -#define auxTempSensor2_adcChannel_offset 2504 -#define auxTempSensor2_adcChannel_offset_hex 9c8 -#define auxTempSensor2_alignmentFill_offset 2505 -#define auxTempSensor2_alignmentFill_offset_hex 9c9 -#define auxTempSensor2_bias_resistor_offset 2500 -#define auxTempSensor2_bias_resistor_offset_hex 9c4 -#define auxTempSensor2_config_offset 2476 -#define auxTempSensor2_config_offset_hex 9ac -#define auxTempSensor2_offset 2476 -#define auxTempSensor2_offset_hex 9ac -#define auxTempSensor2_resistance_1_offset 2488 -#define auxTempSensor2_resistance_1_offset_hex 9b8 -#define auxTempSensor2_resistance_2_offset 2492 -#define auxTempSensor2_resistance_2_offset_hex 9bc -#define auxTempSensor2_resistance_3_offset 2496 -#define auxTempSensor2_resistance_3_offset_hex 9c0 -#define auxTempSensor2_tempC_1_offset 2476 -#define auxTempSensor2_tempC_1_offset_hex 9ac -#define auxTempSensor2_tempC_2_offset 2480 -#define auxTempSensor2_tempC_2_offset_hex 9b0 -#define auxTempSensor2_tempC_3_offset 2484 -#define auxTempSensor2_tempC_3_offset_hex 9b4 -#define auxValves1_offset 1816 -#define auxValves1_offset_hex 718 -#define auxValves2_offset 1817 -#define auxValves2_offset_hex 719 -#define BARO_CORR_SIZE 4 -#define baroCorrPressureBins_offset 1544 -#define baroCorrPressureBins_offset_hex 608 -#define baroCorrRpmBins_offset 1560 -#define baroCorrRpmBins_offset_hex 618 -#define baroCorrTable_offset 1576 -#define baroCorrTable_offset_hex 628 -#define baroSensor_align_offset 597 -#define baroSensor_align_offset_hex 255 -#define baroSensor_highValue_offset 588 -#define baroSensor_highValue_offset_hex 24c -#define baroSensor_hwChannel_offset 596 -#define baroSensor_hwChannel_offset_hex 254 -#define baroSensor_lowValue_offset 584 -#define baroSensor_lowValue_offset_hex 248 -#define baroSensor_offset 584 -#define baroSensor_offset_hex 248 -#define baroSensor_type_offset 592 -#define baroSensor_type_offset_hex 250 -#define bc_offset 600 -#define bc_offset_hex 258 -#define binarySerialRxPin_offset 1815 -#define binarySerialRxPin_offset_hex 717 -#define binarySerialTxPin_offset 1814 -#define binarySerialTxPin_offset_hex 716 -#define biQuad_a0_offset 2332 -#define biQuad_a0_offset_hex 91c -#define biQuad_a1_offset 2336 -#define biQuad_a1_offset_hex 920 -#define biQuad_a2_offset 2340 -#define biQuad_a2_offset_hex 924 -#define biQuad_b1_offset 2344 -#define biQuad_b1_offset_hex 928 -#define biQuad_b2_offset 2348 -#define biQuad_b2_offset_hex 92c -#define biQuad_offset 2332 -#define biQuad_offset_hex 91c -#define BLOCKING_FACTOR 400 -#define boostCutPressure_offset 2132 -#define boostCutPressure_offset_hex 854 -#define brain_input_pin_e_enum "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "N/A", "N/A", "PA10", "PA11", "PA12", "PA13", "N/A", "N/A", "N/A", "N/A", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "N/A", "N/A", "N/A", "N/A", "PB12", "PB13", "N/A", "N/A", "N/A", "N/A", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "N/A", "N/A", "N/A", "N/A", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "PD15", "PD16", "N/A", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A" -#define brain_pin_e_enum "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" -#define brakePedalPin_offset 2608 -#define brakePedalPin_offset_hex a30 -#define brakePedalPinMode_offset 2611 -#define brakePedalPinMode_offset_hex a33 -#define byFirmwareVersion_offset 500 -#define byFirmwareVersion_offset_hex 1f4 -#define CAM_INPUTS_COUNT 4 -#define camInputs1_offset 556 -#define camInputs1_offset_hex 22c -#define camInputs2_offset 557 -#define camInputs2_offset_hex 22d -#define camInputs3_offset 558 -#define camInputs3_offset_hex 22e -#define camInputs4_offset 559 -#define camInputs4_offset_hex 22f -#define can_device_mode_e_enum "v0", "v1" -#define canDeviceMode_offset 732 -#define canDeviceMode_offset_hex 2dc -#define canNbcType_offset 480 -#define canNbcType_offset_hex 1e0 -#define canReadEnabled_offset 1464 -#define canReadEnabled_offset_hex 5b8 -#define canRxPin_offset 709 -#define canRxPin_offset_hex 2c5 -#define canSleepPeriodMs_offset 484 -#define canSleepPeriodMs_offset_hex 1e4 -#define canTxPin_offset 708 -#define canTxPin_offset_hex 2c4 -#define canWriteEnabled_offset 1464 -#define canWriteEnabled_offset_hex 5b8 -#define cdmInputPin_offset 937 -#define cdmInputPin_offset_hex 3a9 -#define cj125CsPin_offset 674 -#define cj125CsPin_offset_hex 2a2 -#define cj125CsPinMode_offset 2225 -#define cj125CsPinMode_offset_hex 8b1 -#define cj125isLsu49_offset 76 -#define cj125isLsu49_offset_hex 4c -#define cj125isUaDivided_offset 76 -#define cj125isUaDivided_offset_hex 4c -#define cj125isUrDivided_offset 76 -#define cj125isUrDivided_offset_hex 4c -#define cj125SpiDevice_offset 2224 -#define cj125SpiDevice_offset_hex 8b0 -#define cj125ua_offset 2609 -#define cj125ua_offset_hex a31 -#define cj125ur_offset 2610 -#define cj125ur_offset_hex a32 -#define clt_adcChannel_offset 280 -#define clt_adcChannel_offset_hex 118 -#define clt_alignmentFill_offset 281 -#define clt_alignmentFill_offset_hex 119 -#define clt_bias_resistor_offset 276 -#define clt_bias_resistor_offset_hex 114 -#define clt_config_offset 252 -#define clt_config_offset_hex fc -#define CLT_CRANKING_CURVE_SIZE 8 -#define CLT_CURVE_SIZE 16 -#define clt_offset 252 -#define clt_offset_hex fc -#define clt_resistance_1_offset 264 -#define clt_resistance_1_offset_hex 108 -#define clt_resistance_2_offset 268 -#define clt_resistance_2_offset_hex 10c -#define clt_resistance_3_offset 272 -#define clt_resistance_3_offset_hex 110 -#define clt_tempC_1_offset 252 -#define clt_tempC_1_offset_hex fc -#define clt_tempC_2_offset 256 -#define clt_tempC_2_offset_hex 100 -#define clt_tempC_3_offset 260 -#define clt_tempC_3_offset_hex 104 -#define CLT_TIMING_CURVE_SIZE 8 -#define cltCrankingCorr_offset 6512 -#define cltCrankingCorr_offset_hex 1970 -#define cltCrankingCorrBins_offset 6480 -#define cltCrankingCorrBins_offset_hex 1950 -#define cltFuelCorr_offset 10336 -#define cltFuelCorr_offset_hex 2860 -#define cltFuelCorrBins_offset 10272 -#define cltFuelCorrBins_offset_hex 2820 -#define cltIdleCorr_offset 10720 -#define cltIdleCorr_offset_hex 29e0 -#define cltIdleCorrBins_offset 10656 -#define cltIdleCorrBins_offset_hex 29a0 -#define cltIdleRpm_offset 1960 -#define cltIdleRpm_offset_hex 7a8 -#define cltIdleRpmBins_offset 1896 -#define cltIdleRpmBins_offset_hex 768 -#define cltTimingBins_offset 2352 -#define cltTimingBins_offset_hex 930 -#define cltTimingExtra_offset 2384 -#define cltTimingExtra_offset_hex 950 -#define clutchDownPin_offset 664 -#define clutchDownPin_offset_hex 298 -#define clutchDownPinInverted_offset 976 -#define clutchDownPinInverted_offset_hex 3d0 -#define clutchDownPinMode_offset 667 -#define clutchDownPinMode_offset_hex 29b -#define clutchUpPin_offset 969 -#define clutchUpPin_offset_hex 3c9 -#define clutchUpPinInverted_offset 976 -#define clutchUpPinInverted_offset_hex 3d0 -#define clutchUpPinMode_offset 971 -#define clutchUpPinMode_offset_hex 3cb -#define CMD_CALIBRATE_PEDAL_DOWN "calibrate_pedal_down" -#define CMD_CALIBRATE_PEDAL_UP "calibrate_pedal_up" -#define CMD_DATE "date" -#define CMD_DISABLE "disable" -#define CMD_ENABLE "enable" -#define CMD_ETB_DUTY "set_etb_duty" -#define CMD_REBOOT "reboot" -#define CMD_REBOOT_DFU "reboot_dfu" -#define CMD_TRIGGER_HW_INPUT "trigger_hw_input" -#define CMD_TRIGGERINFO "triggerinfo" -#define CMD_WRITECONFIG "writeconfig" -#define coastingFuelCutClt_offset 3154 -#define coastingFuelCutClt_offset_hex c52 -#define coastingFuelCutEnabled_offset 744 -#define coastingFuelCutEnabled_offset_hex 2e8 -#define coastingFuelCutMap_offset 3158 -#define coastingFuelCutMap_offset_hex c56 -#define coastingFuelCutRpmHigh_offset 3148 -#define coastingFuelCutRpmHigh_offset_hex c4c -#define coastingFuelCutRpmLow_offset 3150 -#define coastingFuelCutRpmLow_offset_hex c4e -#define coastingFuelCutTps_offset 3152 -#define coastingFuelCutTps_offset_hex c50 -#define communicationLedPin_offset 1812 -#define communicationLedPin_offset_hex 714 -#define CONSOLE_DATA_PROTOCOL_TAG " @" -#define consoleLoopPeriodMs_offset 716 -#define consoleLoopPeriodMs_offset_hex 2cc -#define consoleSerialRxPin_offset 1819 -#define consoleSerialRxPin_offset_hex 71b -#define consoleSerialTxPin_offset 1818 -#define consoleSerialTxPin_offset_hex 71a -#define consoleUartDevice_offset 943 -#define consoleUartDevice_offset_hex 3af -#define CRANKING_ADVANCE_CURVE_SIZE 4 -#define cranking_alignmentFill_offset 94 -#define cranking_alignmentFill_offset_hex 5e -#define cranking_baseFuel_offset 88 -#define cranking_baseFuel_offset_hex 58 -#define CRANKING_CLT_IDLE_CURVE_SIZE 8 -#define CRANKING_CURVE_SIZE 8 -#define cranking_offset 88 -#define cranking_offset_hex 58 -#define cranking_rpm_offset 92 -#define cranking_rpm_offset_hex 5c -#define crankingAdvance_offset 3124 -#define crankingAdvance_offset_hex c34 -#define crankingAdvanceBins_offset 3108 -#define crankingAdvanceBins_offset_hex c24 -#define crankingChargeAngle_offset 104 -#define crankingChargeAngle_offset_hex 68 -#define crankingCycleBins_offset 10624 -#define crankingCycleBins_offset_hex 2980 -#define crankingCycleCoef_offset 10592 -#define crankingCycleCoef_offset_hex 2960 -#define crankingFuelBins_offset 10560 -#define crankingFuelBins_offset_hex 2940 -#define crankingFuelCoef_offset 10528 -#define crankingFuelCoef_offset_hex 2920 -#define crankingIACposition_offset 2228 -#define crankingIACposition_offset_hex 8b4 -#define crankingInjectionMode_offset 424 -#define crankingInjectionMode_offset_hex 1a8 -#define crankingTimingAngle_offset 436 -#define crankingTimingAngle_offset_hex 1b4 -#define crankingTpsBins_offset 1672 -#define crankingTpsBins_offset_hex 688 -#define crankingTpsCoef_offset 1640 -#define crankingTpsCoef_offset_hex 668 -#define cutFuelOnHardLimit_offset 1464 -#define cutFuelOnHardLimit_offset_hex 5b8 -#define cutSparkOnHardLimit_offset 1464 -#define cutSparkOnHardLimit_offset_hex 5b8 -#define cylinderBore_offset 408 -#define cylinderBore_offset_hex 198 -#define cylindersCount_offset 400 -#define cylindersCount_offset_hex 190 -#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", "Trigger Sync", "Electronic Throttle", "Executor", "Bench Test / TS commands", "Aux Valves", "Analog inputs #1", "INSTANT_RPM", "FSIO_EXPRESSION", "Status", "CJ125", "CAN", "MAP", "Metrics", "ETB#2", "Ion Sense", "TLE8888", "Analog inputs #2", "Dwell Metric", "Aux Temperature", "ETB Logic" -#define debugMode_offset 2092 -#define debugMode_offset_hex 82c -#define debugSetTimer_offset 806 -#define debugSetTimer_offset_hex 326 -#define debugTimerCallback_offset 711 -#define debugTimerCallback_offset_hex 2c7 -#define debugTriggerSync_offset 676 -#define debugTriggerSync_offset_hex 2a4 -#define DIGIPOT_COUNT 4 -#define digitalPotentiometerChipSelect1_offset 668 -#define digitalPotentiometerChipSelect1_offset_hex 29c -#define digitalPotentiometerChipSelect2_offset 669 -#define digitalPotentiometerChipSelect2_offset_hex 29d -#define digitalPotentiometerChipSelect3_offset 670 -#define digitalPotentiometerChipSelect3_offset_hex 29e -#define digitalPotentiometerChipSelect4_offset 671 -#define digitalPotentiometerChipSelect4_offset_hex 29f -#define digitalPotentiometerSpiDevice_offset 677 -#define digitalPotentiometerSpiDevice_offset_hex 2a5 -#define directSelfStimulation_offset 76 -#define directSelfStimulation_offset_hex 4c -#define displacement_offset 396 -#define displacement_offset_hex 18c -#define displayMode_offset 492 -#define displayMode_offset_hex 1ec -#define dizzySparkOutputPin_offset 2226 -#define dizzySparkOutputPin_offset_hex 8b2 -#define dizzySparkOutputPinMode_offset 2227 -#define dizzySparkOutputPinMode_offset_hex 8b3 -#define DWELL_CURVE_SIZE 8 -#define ego_sensor_e_enum "BPSX", "Innovate", "14Point7", "Narrow", "PLX", "Custom" -#define egoValueShift_offset 2216 -#define egoValueShift_offset_hex 8a8 -#define EGT_CHANNEL_COUNT 8 -#define electronicThrottlePin1Mode_offset 672 -#define electronicThrottlePin1Mode_offset_hex 2a0 -#define enabledStep1Limiter_offset 744 -#define enabledStep1Limiter_offset_hex 2e8 -#define engine_load_mode_e_enum "MAF", "Alpha-N/TPS", "MAP", "SPEED DENSITY", "MAF Air Charge" -#define ENGINE_NOISE_CURVE_SIZE 8 -#define engineChartSize_offset 1480 -#define engineChartSize_offset_hex 5c8 -#define engineConfiguration_offset 0 -#define engineConfiguration_offset_hex 0 -#define engineLoadAccelEnrichmentMultiplier_offset 2072 -#define engineLoadAccelEnrichmentMultiplier_offset_hex 818 -#define engineLoadAccelEnrichmentThreshold_offset 2068 -#define engineLoadAccelEnrichmentThreshold_offset_hex 814 -#define engineLoadAccelLength_offset 2056 -#define engineLoadAccelLength_offset_hex 808 -#define engineLoadDecelEnleanmentMultiplier_offset 2064 -#define engineLoadDecelEnleanmentMultiplier_offset_hex 810 -#define engineLoadDecelEnleanmentThreshold_offset 2060 -#define engineLoadDecelEnleanmentThreshold_offset_hex 80c -#define engineSnifferRpmThreshold_offset 4 -#define engineSnifferRpmThreshold_offset_hex 4 -#define engineType_offset 0 -#define engineType_offset_hex 0 -#define etb1_controlPin1_offset 682 -#define etb1_controlPin1_offset_hex 2aa -#define etb1_controlPinMode_offset 683 -#define etb1_controlPinMode_offset_hex 2ab -#define etb1_directionPin1_offset 680 -#define etb1_directionPin1_offset_hex 2a8 -#define etb1_directionPin2_offset 681 -#define etb1_directionPin2_offset_hex 2a9 -#define etb1_offset 680 -#define etb1_offset_hex 2a8 -#define etb1_use_two_wires_offset 76 -#define etb1_use_two_wires_offset_hex 4c -#define etb2_controlPin1_offset 3966 -#define etb2_controlPin1_offset_hex f7e -#define etb2_controlPinMode_offset 3967 -#define etb2_controlPinMode_offset_hex f7f -#define etb2_directionPin1_offset 3964 -#define etb2_directionPin1_offset_hex f7c -#define etb2_directionPin2_offset 3965 -#define etb2_directionPin2_offset_hex f7d -#define etb2_offset 3964 -#define etb2_offset_hex f7c -#define etb2_use_two_wires_offset 76 -#define etb2_use_two_wires_offset_hex 4c -#define ETB_BIAS_CURVE_LENGTH 8 -#define etb_dFactor_offset 1744 -#define etb_dFactor_offset_hex 6d0 -#define etb_iFactor_offset 1740 -#define etb_iFactor_offset_hex 6cc -#define etb_iTermMax_offset 3958 -#define etb_iTermMax_offset_hex f76 -#define etb_iTermMin_offset 3956 -#define etb_iTermMin_offset_hex f74 -#define etb_maxValue_offset 1754 -#define etb_maxValue_offset_hex 6da -#define etb_minValue_offset 1752 -#define etb_minValue_offset_hex 6d8 -#define etb_offset 1736 -#define etb_offset_hex 6c8 -#define etb_offset_offset 1748 -#define etb_offset_offset_hex 6d4 -#define etb_periodMs_offset 1750 -#define etb_periodMs_offset_hex 6d6 -#define etb_pFactor_offset 1736 -#define etb_pFactor_offset_hex 6c8 -#define etbBiasBins_offset 3888 -#define etbBiasBins_offset_hex f30 -#define etbBiasValues_offset 3920 -#define etbBiasValues_offset_hex f50 -#define etbCalibrationOnStart_offset 1476 -#define etbCalibrationOnStart_offset_hex 5c4 -#define etbDeadband_offset 3960 -#define etbDeadband_offset_hex f78 -#define etbFreq_offset 2514 -#define etbFreq_offset_hex 9d2 -#define etbIdleRange_offset 972 -#define etbIdleRange_offset_hex 3cc -#define etbIdleThrottleRange_offset 4012 -#define etbIdleThrottleRange_offset_hex fac -#define etbNeutralPosition_offset 1471 -#define etbNeutralPosition_offset_hex 5bf -#define externalKnockSenseAdc_offset 3103 -#define externalKnockSenseAdc_offset_hex c1f -#define extraInjectionOffset_offset 432 -#define extraInjectionOffset_offset_hex 1b0 -#define fanOffTemperature_offset 472 -#define fanOffTemperature_offset_hex 1d8 -#define fanOnTemperature_offset 468 -#define fanOnTemperature_offset_hex 1d4 -#define fanPin_offset 663 -#define fanPin_offset_hex 297 -#define fanPinMode_offset 662 -#define fanPinMode_offset_hex 296 -#define firingOrder_offset 404 -#define firingOrder_offset_hex 194 -#define fixedModeTiming_offset 452 -#define fixedModeTiming_offset_hex 1c4 -#define fixedTiming_offset 2204 -#define fixedTiming_offset_hex 89c -#define frequencyReportingMapInputPin_offset 970 -#define frequencyReportingMapInputPin_offset_hex 3ca -#define FSIO_ANALOG_INPUT_COUNT 4 -#define FSIO_COMMAND_COUNT 16 -#define FSIO_CURVE_16 16 -#define FSIO_CURVE_8 8 -#define fsio_setting10_offset 900 -#define fsio_setting10_offset_hex 384 -#define fsio_setting11_offset 904 -#define fsio_setting11_offset_hex 388 -#define fsio_setting12_offset 908 -#define fsio_setting12_offset_hex 38c -#define fsio_setting13_offset 912 -#define fsio_setting13_offset_hex 390 -#define fsio_setting14_offset 916 -#define fsio_setting14_offset_hex 394 -#define fsio_setting15_offset 920 -#define fsio_setting15_offset_hex 398 -#define fsio_setting16_offset 924 -#define fsio_setting16_offset_hex 39c -#define fsio_setting1_offset 864 -#define fsio_setting1_offset_hex 360 -#define fsio_setting2_offset 868 -#define fsio_setting2_offset_hex 364 -#define fsio_setting3_offset 872 -#define fsio_setting3_offset_hex 368 -#define fsio_setting4_offset 876 -#define fsio_setting4_offset_hex 36c -#define fsio_setting5_offset 880 -#define fsio_setting5_offset_hex 370 -#define fsio_setting6_offset 884 -#define fsio_setting6_offset_hex 374 -#define fsio_setting7_offset 888 -#define fsio_setting7_offset_hex 378 -#define fsio_setting8_offset 892 -#define fsio_setting8_offset_hex 37c -#define fsio_setting9_offset 896 -#define fsio_setting9_offset_hex 380 -#define FSIO_TABLE_8 8 -#define fsioAdc1_offset 2200 -#define fsioAdc1_offset_hex 898 -#define fsioAdc2_offset 2201 -#define fsioAdc2_offset_hex 899 -#define fsioAdc3_offset 2202 -#define fsioAdc3_offset_hex 89a -#define fsioAdc4_offset 2203 -#define fsioAdc4_offset_hex 89b -#define fsioCurve1_offset 2780 -#define fsioCurve1_offset_hex adc -#define fsioCurve1Bins_offset 2716 -#define fsioCurve1Bins_offset_hex a9c -#define fsioCurve2_offset 2908 -#define fsioCurve2_offset_hex b5c -#define fsioCurve2Bins_offset 2844 -#define fsioCurve2Bins_offset_hex b1c -#define fsioCurve3_offset 3004 -#define fsioCurve3_offset_hex bbc -#define fsioCurve3Bins_offset 2972 -#define fsioCurve3Bins_offset_hex b9c -#define fsioCurve4_offset 3068 -#define fsioCurve4_offset_hex bfc -#define fsioCurve4Bins_offset 3036 -#define fsioCurve4Bins_offset_hex bdc -#define fsioDigitalInputs10_offset 961 -#define fsioDigitalInputs10_offset_hex 3c1 -#define fsioDigitalInputs11_offset 962 -#define fsioDigitalInputs11_offset_hex 3c2 -#define fsioDigitalInputs12_offset 963 -#define fsioDigitalInputs12_offset_hex 3c3 -#define fsioDigitalInputs13_offset 964 -#define fsioDigitalInputs13_offset_hex 3c4 -#define fsioDigitalInputs14_offset 965 -#define fsioDigitalInputs14_offset_hex 3c5 -#define fsioDigitalInputs15_offset 966 -#define fsioDigitalInputs15_offset_hex 3c6 -#define fsioDigitalInputs16_offset 967 -#define fsioDigitalInputs16_offset_hex 3c7 -#define fsioDigitalInputs1_offset 952 -#define fsioDigitalInputs1_offset_hex 3b8 -#define fsioDigitalInputs2_offset 953 -#define fsioDigitalInputs2_offset_hex 3b9 -#define fsioDigitalInputs3_offset 954 -#define fsioDigitalInputs3_offset_hex 3ba -#define fsioDigitalInputs4_offset 955 -#define fsioDigitalInputs4_offset_hex 3bb -#define fsioDigitalInputs5_offset 956 -#define fsioDigitalInputs5_offset_hex 3bc -#define fsioDigitalInputs6_offset 957 -#define fsioDigitalInputs6_offset_hex 3bd -#define fsioDigitalInputs7_offset 958 -#define fsioDigitalInputs7_offset_hex 3be -#define fsioDigitalInputs8_offset 959 -#define fsioDigitalInputs8_offset_hex 3bf -#define fsioDigitalInputs9_offset 960 -#define fsioDigitalInputs9_offset_hex 3c0 -#define fsioFormulas10_offset 8472 -#define fsioFormulas10_offset_hex 2118 -#define fsioFormulas11_offset 8672 -#define fsioFormulas11_offset_hex 21e0 -#define fsioFormulas12_offset 8872 -#define fsioFormulas12_offset_hex 22a8 -#define fsioFormulas13_offset 9072 -#define fsioFormulas13_offset_hex 2370 -#define fsioFormulas14_offset 9272 -#define fsioFormulas14_offset_hex 2438 -#define fsioFormulas15_offset 9472 -#define fsioFormulas15_offset_hex 2500 -#define fsioFormulas16_offset 9672 -#define fsioFormulas16_offset_hex 25c8 -#define fsioFormulas1_offset 6672 -#define fsioFormulas1_offset_hex 1a10 -#define fsioFormulas2_offset 6872 -#define fsioFormulas2_offset_hex 1ad8 -#define fsioFormulas3_offset 7072 -#define fsioFormulas3_offset_hex 1ba0 -#define fsioFormulas4_offset 7272 -#define fsioFormulas4_offset_hex 1c68 -#define fsioFormulas5_offset 7472 -#define fsioFormulas5_offset_hex 1d30 -#define fsioFormulas6_offset 7672 -#define fsioFormulas6_offset_hex 1df8 -#define fsioFormulas7_offset 7872 -#define fsioFormulas7_offset_hex 1ec0 -#define fsioFormulas8_offset 8072 -#define fsioFormulas8_offset_hex 1f88 -#define fsioFormulas9_offset 8272 -#define fsioFormulas9_offset_hex 2050 -#define fsioFrequency10_offset 850 -#define fsioFrequency10_offset_hex 352 -#define fsioFrequency11_offset 852 -#define fsioFrequency11_offset_hex 354 -#define fsioFrequency12_offset 854 -#define fsioFrequency12_offset_hex 356 -#define fsioFrequency13_offset 856 -#define fsioFrequency13_offset_hex 358 -#define fsioFrequency14_offset 858 -#define fsioFrequency14_offset_hex 35a -#define fsioFrequency15_offset 860 -#define fsioFrequency15_offset_hex 35c -#define fsioFrequency16_offset 862 -#define fsioFrequency16_offset_hex 35e -#define fsioFrequency1_offset 832 -#define fsioFrequency1_offset_hex 340 -#define fsioFrequency2_offset 834 -#define fsioFrequency2_offset_hex 342 -#define fsioFrequency3_offset 836 -#define fsioFrequency3_offset_hex 344 -#define fsioFrequency4_offset 838 -#define fsioFrequency4_offset_hex 346 -#define fsioFrequency5_offset 840 -#define fsioFrequency5_offset_hex 348 -#define fsioFrequency6_offset 842 -#define fsioFrequency6_offset_hex 34a -#define fsioFrequency7_offset 844 -#define fsioFrequency7_offset_hex 34c -#define fsioFrequency8_offset 846 -#define fsioFrequency8_offset_hex 34e -#define fsioFrequency9_offset 848 -#define fsioFrequency9_offset_hex 350 -#define fsioInputModes10_offset 1525 -#define fsioInputModes10_offset_hex 5f5 -#define fsioInputModes11_offset 1526 -#define fsioInputModes11_offset_hex 5f6 -#define fsioInputModes12_offset 1527 -#define fsioInputModes12_offset_hex 5f7 -#define fsioInputModes13_offset 1528 -#define fsioInputModes13_offset_hex 5f8 -#define fsioInputModes14_offset 1529 -#define fsioInputModes14_offset_hex 5f9 -#define fsioInputModes15_offset 1530 -#define fsioInputModes15_offset_hex 5fa -#define fsioInputModes16_offset 1531 -#define fsioInputModes16_offset_hex 5fb -#define fsioInputModes1_offset 1516 -#define fsioInputModes1_offset_hex 5ec -#define fsioInputModes2_offset 1517 -#define fsioInputModes2_offset_hex 5ed -#define fsioInputModes3_offset 1518 -#define fsioInputModes3_offset_hex 5ee -#define fsioInputModes4_offset 1519 -#define fsioInputModes4_offset_hex 5ef -#define fsioInputModes5_offset 1520 -#define fsioInputModes5_offset_hex 5f0 -#define fsioInputModes6_offset 1521 -#define fsioInputModes6_offset_hex 5f1 -#define fsioInputModes7_offset 1522 -#define fsioInputModes7_offset_hex 5f2 -#define fsioInputModes8_offset 1523 -#define fsioInputModes8_offset_hex 5f3 -#define fsioInputModes9_offset 1524 -#define fsioInputModes9_offset_hex 5f4 -#define fsioOutputPins10_offset 789 -#define fsioOutputPins10_offset_hex 315 -#define fsioOutputPins11_offset 790 -#define fsioOutputPins11_offset_hex 316 -#define fsioOutputPins12_offset 791 -#define fsioOutputPins12_offset_hex 317 -#define fsioOutputPins13_offset 792 -#define fsioOutputPins13_offset_hex 318 -#define fsioOutputPins14_offset 793 -#define fsioOutputPins14_offset_hex 319 -#define fsioOutputPins15_offset 794 -#define fsioOutputPins15_offset_hex 31a -#define fsioOutputPins16_offset 795 -#define fsioOutputPins16_offset_hex 31b -#define fsioOutputPins1_offset 780 -#define fsioOutputPins1_offset_hex 30c -#define fsioOutputPins2_offset 781 -#define fsioOutputPins2_offset_hex 30d -#define fsioOutputPins3_offset 782 -#define fsioOutputPins3_offset_hex 30e -#define fsioOutputPins4_offset 783 -#define fsioOutputPins4_offset_hex 30f -#define fsioOutputPins5_offset 784 -#define fsioOutputPins5_offset_hex 310 -#define fsioOutputPins6_offset 785 -#define fsioOutputPins6_offset_hex 311 -#define fsioOutputPins7_offset 786 -#define fsioOutputPins7_offset_hex 312 -#define fsioOutputPins8_offset 787 -#define fsioOutputPins8_offset_hex 313 -#define fsioOutputPins9_offset 788 -#define fsioOutputPins9_offset_hex 314 -#define fsioTable1_offset 19296 -#define fsioTable1_offset_hex 4b60 -#define fsioTable1LoadBins_offset 19552 -#define fsioTable1LoadBins_offset_hex 4c60 -#define fsioTable1RpmBins_offset 19584 -#define fsioTable1RpmBins_offset_hex 4c80 -#define fsioTable2_offset 19616 -#define fsioTable2_offset_hex 4ca0 -#define fsioTable2LoadBins_offset 19680 -#define fsioTable2LoadBins_offset_hex 4ce0 -#define fsioTable2RpmBins_offset 19712 -#define fsioTable2RpmBins_offset_hex 4d00 -#define fsioTable3_offset 19744 -#define fsioTable3_offset_hex 4d20 -#define fsioTable3LoadBins_offset 19808 -#define fsioTable3LoadBins_offset_hex 4d60 -#define fsioTable3RpmBins_offset 19840 -#define fsioTable3RpmBins_offset_hex 4d80 -#define fsioTable4_offset 19872 -#define fsioTable4_offset_hex 4da0 -#define fsioTable4LoadBins_offset 19936 -#define fsioTable4LoadBins_offset_hex 4de0 -#define fsioTable4RpmBins_offset 19968 -#define fsioTable4RpmBins_offset_hex 4e00 -#define FUEL_LOAD_COUNT 16 -#define FUEL_RPM_COUNT 16 -#define fuelAlgorithm_offset 420 -#define fuelAlgorithm_offset_hex 1a4 -#define fuelClosedLoopAfrHighThreshold_offset 2536 -#define fuelClosedLoopAfrHighThreshold_offset_hex 9e8 -#define fuelClosedLoopAfrLowThreshold_offset 696 -#define fuelClosedLoopAfrLowThreshold_offset_hex 2b8 -#define fuelClosedLoopCltThreshold_offset 2508 -#define fuelClosedLoopCltThreshold_offset_hex 9cc -#define fuelClosedLoopCorrectionEnabled_offset 1464 -#define fuelClosedLoopCorrectionEnabled_offset_hex 5b8 -#define fuelClosedLoopPid_dFactor_offset 2524 -#define fuelClosedLoopPid_dFactor_offset_hex 9dc -#define fuelClosedLoopPid_iFactor_offset 2520 -#define fuelClosedLoopPid_iFactor_offset_hex 9d8 -#define fuelClosedLoopPid_maxValue_offset 2534 -#define fuelClosedLoopPid_maxValue_offset_hex 9e6 -#define fuelClosedLoopPid_minValue_offset 2532 -#define fuelClosedLoopPid_minValue_offset_hex 9e4 -#define fuelClosedLoopPid_offset 2516 -#define fuelClosedLoopPid_offset_hex 9d4 -#define fuelClosedLoopPid_offset_offset 2528 -#define fuelClosedLoopPid_offset_offset_hex 9e0 -#define fuelClosedLoopPid_periodMs_offset 2530 -#define fuelClosedLoopPid_periodMs_offset_hex 9e2 -#define fuelClosedLoopPid_pFactor_offset 2516 -#define fuelClosedLoopPid_pFactor_offset_hex 9d4 -#define fuelClosedLoopRpmThreshold_offset 2512 -#define fuelClosedLoopRpmThreshold_offset_hex 9d0 -#define fuelClosedLoopTpsThreshold_offset 2510 -#define fuelClosedLoopTpsThreshold_offset_hex 9ce -#define fuelLevelEmptyTankVoltage_offset 684 -#define fuelLevelEmptyTankVoltage_offset_hex 2ac -#define fuelLevelFullTankVoltage_offset 688 -#define fuelLevelFullTankVoltage_offset_hex 2b0 -#define fuelLevelSensor_offset 514 -#define fuelLevelSensor_offset_hex 202 -#define fuelLoadBins_offset 16160 -#define fuelLoadBins_offset_hex 3f20 -#define fuelPumpPin_offset 658 -#define fuelPumpPin_offset_hex 292 -#define fuelPumpPinMode_offset 659 -#define fuelPumpPinMode_offset_hex 293 -#define fuelRailPressure_offset 1756 -#define fuelRailPressure_offset_hex 6dc -#define fuelRpmBins_offset 16224 -#define fuelRpmBins_offset_hex 3f60 -#define fuelTable_offset 15136 -#define fuelTable_offset_hex 3b20 -#define GAUGE_COIL_DWELL_TIME "dwell: coil charge time" -#define GAUGE_NAME_ACCEL_X "Acceleration: X" -#define GAUGE_NAME_ACCEL_Y "Acceleration: Y" -#define GAUGE_NAME_ACCEL_Z "Acceleration: Z" -#define GAUGE_NAME_AFR "Air/Fuel Ratio" -#define GAUGE_NAME_AIR_FLOW "air flow" -#define GAUGE_NAME_AIR_MASS "air mass" -#define GAUGE_NAME_CPU_TEMP "CPU Temperature" -#define GAUGE_NAME_DEBUG_F1 "debug f1" -#define GAUGE_NAME_DEBUG_F2 "debug f2: iTerm" -#define GAUGE_NAME_DEBUG_F3 "debug f3: prevError" -#define GAUGE_NAME_DEBUG_F4 "debug f4: iParam" -#define GAUGE_NAME_DEBUG_F5 "debug f5: dParam" -#define GAUGE_NAME_DEBUG_F6 "debug f6: dTerm" -#define GAUGE_NAME_DEBUG_F7 "debug f7" -#define GAUGE_NAME_DEBUG_I1 "debug i1: pParam" -#define GAUGE_NAME_DEBUG_I2 "debug i2: offset" -#define GAUGE_NAME_DEBUG_I3 "debug i3" -#define GAUGE_NAME_DEBUG_I4 "debug i4" -#define GAUGE_NAME_DEBUG_I5 "debug i5" -#define GAUGE_NAME_DWELL_DUTY "dwell: coil duty cycle" -#define GAUGE_NAME_ECU_TEMPERATURE "ECU temperature" -#define GAUGE_NAME_ENGINE_LOAD "Engine Load" -#define GAUGE_NAME_ETB_DUTY "ETB duty cycle" -#define GAUGE_NAME_ETB_ERROR "ETB position error" -#define GAUGE_NAME_ETB_TARGET "ETB position target" -#define GAUGE_NAME_FUEL_BARO_CORR "fuel: Barometric pressure correction" -#define GAUGE_NAME_FUEL_BASE "fuel: base" -#define GAUGE_NAME_FUEL_CHARGE_TEMP "fuel: Estimated charge temperature" -#define GAUGE_NAME_FUEL_CLT_CORR "fuel: CLT correction" -#define GAUGE_NAME_FUEL_CRANKING "fuel: cranking" -#define GAUGE_NAME_FUEL_EL_EXTRA "fuel: engine load acceleration extra fuel" -#define GAUGE_NAME_FUEL_IAT_CORR "fuel: IAT correction" -#define GAUGE_NAME_FUEL_INJ_DUTY "fuel: injector duty cycle" -#define GAUGE_NAME_FUEL_LAST_INJECTION "fuel: Last injection" -#define GAUGE_NAME_FUEL_PID_CORR "fuel: Short-term closed loop correction" -#define GAUGE_NAME_FUEL_RUNNING "fuel: running" -#define GAUGE_NAME_FUEL_TPS_EXTRA "fuel: TPS acceleration extra fuel ms" -#define GAUGE_NAME_FUEL_TPS_ROC "fuel: TPS change" -#define GAUGE_NAME_FUEL_VE "fuel: VE" -#define GAUGE_NAME_FUEL_WALL_AMOUNT "fuel: wall amount" -#define GAUGE_NAME_FUEL_WALL_CORRECTION "fuel: wall corr ms" -#define GAUGE_NAME_IAC "Idle Air Valve" -#define GAUGE_NAME_INJECTOR_LAG "fuel: injector lag" -#define GAUGE_NAME_KNOCK_COUNTER "knock: counter" -#define GAUGE_NAME_KNOCK_LEVEL "knock: current level" -#define GAUGE_NAME_TARGET_AFR "fuel: target AFR" -#define GAUGE_NAME_TCHARGE "fuel: SD tCharge" -#define GAUGE_NAME_THROTTLE_PEDAL "Throttle pedal position" -#define GAUGE_NAME_TIMING_ADVANCE "timing" -#define GAUGE_NAME_VBAT "VBatt" -#define GAUGE_NAME_VERSION "firmware" -#define GAUGE_NAME_VVS "Vehicle Speed" -#define GAUGE_NAME_VVT "VVT position" -#define GAUGE_NAME_WARNING_COUNTER "warning: counter" -#define GAUGE_NAME_WARNING_LAST "warning: last" -#define generalPeriodicThreadPeriodMs_offset 724 -#define generalPeriodicThreadPeriodMs_offset_hex 2d4 -#define globalFuelCorrection_offset 544 -#define globalFuelCorrection_offset_hex 220 -#define globalTriggerAngleOffset_offset 456 -#define globalTriggerAngleOffset_offset_hex 1c8 -#define gpioPinModes10_offset 773 -#define gpioPinModes10_offset_hex 305 -#define gpioPinModes11_offset 774 -#define gpioPinModes11_offset_hex 306 -#define gpioPinModes12_offset 775 -#define gpioPinModes12_offset_hex 307 -#define gpioPinModes13_offset 776 -#define gpioPinModes13_offset_hex 308 -#define gpioPinModes14_offset 777 -#define gpioPinModes14_offset_hex 309 -#define gpioPinModes15_offset 778 -#define gpioPinModes15_offset_hex 30a -#define gpioPinModes16_offset 779 -#define gpioPinModes16_offset_hex 30b -#define gpioPinModes1_offset 764 -#define gpioPinModes1_offset_hex 2fc -#define gpioPinModes2_offset 765 -#define gpioPinModes2_offset_hex 2fd -#define gpioPinModes3_offset 766 -#define gpioPinModes3_offset_hex 2fe -#define gpioPinModes4_offset 767 -#define gpioPinModes4_offset_hex 2ff -#define gpioPinModes5_offset 768 -#define gpioPinModes5_offset_hex 300 -#define gpioPinModes6_offset 769 -#define gpioPinModes6_offset_hex 301 -#define gpioPinModes7_offset 770 -#define gpioPinModes7_offset_hex 302 -#define gpioPinModes8_offset 771 -#define gpioPinModes8_offset_hex 303 -#define gpioPinModes9_offset 772 -#define gpioPinModes9_offset_hex 304 -#define gps_rx_pin_offset 656 -#define gps_rx_pin_offset_hex 290 -#define gps_tx_pin_offset 657 -#define gps_tx_pin_offset_hex 291 -#define hasFrequencyReportingMapSensor_offset 1464 -#define hasFrequencyReportingMapSensor_offset_hex 5b8 -#define HD44780_db4_offset 652 -#define HD44780_db4_offset_hex 28c -#define HD44780_db5_offset 653 -#define HD44780_db5_offset_hex 28d -#define HD44780_db6_offset 654 -#define HD44780_db6_offset_hex 28e -#define HD44780_db7_offset 655 -#define HD44780_db7_offset_hex 28f -#define HD44780_e_offset 651 -#define HD44780_e_offset_hex 28b -#define HD44780_rs_offset 650 -#define HD44780_rs_offset_hex 28a -#define HD44780height_offset 508 -#define HD44780height_offset_hex 1fc -#define HD44780width_offset 504 -#define HD44780width_offset_hex 1f8 -#define high_fuel_pressure_sensor_1_offset 541 -#define high_fuel_pressure_sensor_1_offset_hex 21d -#define high_fuel_pressure_sensor_2_offset 542 -#define high_fuel_pressure_sensor_2_offset_hex 21e -#define hip9011CsPin_offset 753 -#define hip9011CsPin_offset_hex 2f1 -#define hip9011CsPinMode_offset 703 -#define hip9011CsPinMode_offset_hex 2bf -#define hip9011Gain_offset 3952 -#define hip9011Gain_offset_hex f70 -#define hip9011IntHoldPin_offset 754 -#define hip9011IntHoldPin_offset_hex 2f2 -#define hip9011IntHoldPinMode_offset 755 -#define hip9011IntHoldPinMode_offset_hex 2f3 -#define hip9011PrescalerAndSDO_offset 324 -#define hip9011PrescalerAndSDO_offset_hex 144 -#define hip9011SpiDevice_offset 540 -#define hip9011SpiDevice_offset_hex 21c -#define hipOutputChannel_offset 1468 -#define hipOutputChannel_offset_hex 5bc -#define HW_MAX_ADC_INDEX 17 -#define IAC_PID_MULT_SIZE 8 -#define iacByTpsTaper_offset 2038 -#define iacByTpsTaper_offset_hex 7f6 -#define iacCoasting_offset 3224 -#define iacCoasting_offset_hex c98 -#define iacCoastingBins_offset 3160 -#define iacCoastingBins_offset_hex c58 -#define iacPidMultLoadBins_offset 4124 -#define iacPidMultLoadBins_offset_hex 101c -#define iacPidMultRpmBins_offset 4132 -#define iacPidMultRpmBins_offset_hex 1024 -#define iacPidMultTable_offset 4060 -#define iacPidMultTable_offset_hex fdc -#define iat_adcChannel_offset 312 -#define iat_adcChannel_offset_hex 138 -#define iat_alignmentFill_offset 313 -#define iat_alignmentFill_offset_hex 139 -#define iat_bias_resistor_offset 308 -#define iat_bias_resistor_offset_hex 134 -#define iat_config_offset 284 -#define iat_config_offset_hex 11c -#define IAT_CURVE_SIZE 16 -#define iat_offset 284 -#define iat_offset_hex 11c -#define iat_resistance_1_offset 296 -#define iat_resistance_1_offset_hex 128 -#define iat_resistance_2_offset 300 -#define iat_resistance_2_offset_hex 12c -#define iat_resistance_3_offset 304 -#define iat_resistance_3_offset_hex 130 -#define iat_tempC_1_offset 284 -#define iat_tempC_1_offset_hex 11c -#define iat_tempC_2_offset 288 -#define iat_tempC_2_offset_hex 120 -#define iat_tempC_3_offset 292 -#define iat_tempC_3_offset_hex 124 -#define iatFuelCorr_offset 10464 -#define iatFuelCorr_offset_hex 28e0 -#define iatFuelCorrBins_offset 10400 -#define iatFuelCorrBins_offset_hex 28a0 -#define IDLE_ADVANCE_CURVE_SIZE 8 -#define idle_offset 600 -#define idle_offset_hex 258 -#define idle_solenoidFrequency_offset 600 -#define idle_solenoidFrequency_offset_hex 258 -#define idle_solenoidPin_offset 604 -#define idle_solenoidPin_offset_hex 25c -#define idle_solenoidPinMode_offset 607 -#define idle_solenoidPinMode_offset_hex 25f -#define idle_stepperDirectionPin_offset 605 -#define idle_stepperDirectionPin_offset_hex 25d -#define idle_stepperStepPin_offset 606 -#define idle_stepperStepPin_offset_hex 25e -#define IDLE_VE_CURVE_SIZE 8 -#define idleAdvance_offset 6576 -#define idleAdvance_offset_hex 19b0 -#define idleAdvanceBins_offset 6544 -#define idleAdvanceBins_offset_hex 1990 -#define idleIncrementalPidCic_offset 744 -#define idleIncrementalPidCic_offset_hex 2e8 -#define idleMode_offset 1472 -#define idleMode_offset_hex 5c0 -#define idlePidActivationTime_offset 2588 -#define idlePidActivationTime_offset_hex a1c -#define idlePidDeactivationTpsThreshold_offset 816 -#define idlePidDeactivationTpsThreshold_offset_hex 330 -#define idlePidFalloffDeltaRpm_offset 3992 -#define idlePidFalloffDeltaRpm_offset_hex f98 -#define idlePidRpmDeadZone_offset 1894 -#define idlePidRpmDeadZone_offset_hex 766 -#define idlePidRpmUpperLimit_offset 1484 -#define idlePidRpmUpperLimit_offset_hex 5cc -#define idleRpmPid2_dFactor_offset 4048 -#define idleRpmPid2_dFactor_offset_hex fd0 -#define idleRpmPid2_iFactor_offset 4044 -#define idleRpmPid2_iFactor_offset_hex fcc -#define idleRpmPid2_maxValue_offset 4058 -#define idleRpmPid2_maxValue_offset_hex fda -#define idleRpmPid2_minValue_offset 4056 -#define idleRpmPid2_minValue_offset_hex fd8 -#define idleRpmPid2_offset 4040 -#define idleRpmPid2_offset_hex fc8 -#define idleRpmPid2_offset_offset 4052 -#define idleRpmPid2_offset_offset_hex fd4 -#define idleRpmPid2_periodMs_offset 4054 -#define idleRpmPid2_periodMs_offset_hex fd6 -#define idleRpmPid2_pFactor_offset 4040 -#define idleRpmPid2_pFactor_offset_hex fc8 -#define idleRpmPid_dFactor_offset 1796 -#define idleRpmPid_dFactor_offset_hex 704 -#define idleRpmPid_iFactor_offset 1792 -#define idleRpmPid_iFactor_offset_hex 700 -#define idlerpmpid_iTermMax_offset 4006 -#define idlerpmpid_iTermMax_offset_hex fa6 -#define idlerpmpid_iTermMin_offset 4002 -#define idlerpmpid_iTermMin_offset_hex fa2 -#define idleRpmPid_maxValue_offset 1806 -#define idleRpmPid_maxValue_offset_hex 70e -#define idleRpmPid_minValue_offset 1804 -#define idleRpmPid_minValue_offset_hex 70c -#define idleRpmPid_offset 1788 -#define idleRpmPid_offset_hex 6fc -#define idleRpmPid_offset_offset 1800 -#define idleRpmPid_offset_offset_hex 708 -#define idleRpmPid_periodMs_offset 1802 -#define idleRpmPid_periodMs_offset_hex 70a -#define idleRpmPid_pFactor_offset 1788 -#define idleRpmPid_pFactor_offset_hex 6fc -#define idleStepperReactionTime_offset 1508 -#define idleStepperReactionTime_offset_hex 5e4 -#define idleStepperTotalSteps_offset 1532 -#define idleStepperTotalSteps_offset_hex 5fc -#define idleThreadPeriodMs_offset 712 -#define idleThreadPeriodMs_offset_hex 2c8 -#define idleTimingPid_dFactor_offset 3976 -#define idleTimingPid_dFactor_offset_hex f88 -#define idleTimingPid_iFactor_offset 3972 -#define idleTimingPid_iFactor_offset_hex f84 -#define idleTimingPid_maxValue_offset 3986 -#define idleTimingPid_maxValue_offset_hex f92 -#define idleTimingPid_minValue_offset 3984 -#define idleTimingPid_minValue_offset_hex f90 -#define idleTimingPid_offset 3968 -#define idleTimingPid_offset_hex f80 -#define idleTimingPid_offset_offset 3980 -#define idleTimingPid_offset_offset_hex f8c -#define idleTimingPid_periodMs_offset 3982 -#define idleTimingPid_periodMs_offset_hex f8e -#define idleTimingPid_pFactor_offset 3968 -#define idleTimingPid_pFactor_offset_hex f80 -#define idleTimingPidDeadZone_offset 3990 -#define idleTimingPidDeadZone_offset_hex f96 -#define idleTimingPidWorkZone_offset 3988 -#define idleTimingPidWorkZone_offset_hex f94 -#define idleVe_offset 6640 -#define idleVe_offset_hex 19f0 -#define idleVeBins_offset 6608 -#define idleVeBins_offset_hex 19d0 -#define IGN_LOAD_COUNT 16 -#define IGN_RPM_COUNT 16 -#define IGN_TPS_COUNT 16 -#define IGNITION_PIN_COUNT 12 -#define ignitionDwellForCrankingMs_offset 100 -#define ignitionDwellForCrankingMs_offset_hex 64 -#define ignitionIatCorrLoadBins_offset 13856 -#define ignitionIatCorrLoadBins_offset_hex 3620 -#define ignitionIatCorrRpmBins_offset 13920 -#define ignitionIatCorrRpmBins_offset_hex 3660 -#define ignitionIatCorrTable_offset 12832 -#define ignitionIatCorrTable_offset_hex 3220 -#define ignitionLoadBins_offset 17312 -#define ignitionLoadBins_offset_hex 43a0 -#define ignitionMode_offset 440 -#define ignitionMode_offset_hex 1b8 -#define ignitionOffset_offset 444 -#define ignitionOffset_offset_hex 1bc -#define ignitionPin10logic -#define ignitionPin11logic -#define ignitionPin12logic -#define ignitionPin2logic || ((firingOrder == 2) || (firingOrder == 7) || (firingOrder == 9) || (firingOrder == 11) || (firingOrder == 12)) -#define ignitionPin3logic || ((firingOrder == 1) || (firingOrder == 3) || (firingOrder == 4) || (firingOrder == 5) || (firingOrder == 9)) -#define ignitionPin4logic || ((firingOrder == 5) || (firingOrder == 7) || (firingOrder == 12)) -#define ignitionPin5logic || ((firingOrder == 4) || (firingOrder == 12)) -#define ignitionPin6logic -#define ignitionPin7logic || ((firingOrder == 11)) -#define ignitionPin8logic || ((firingOrder == 5) || (firingOrder == 11)) -#define ignitionPin9logic -#define ignitionPinMode_offset 649 -#define ignitionPinMode_offset_hex 289 -#define ignitionPins10_offset 645 -#define ignitionPins10_offset_hex 285 -#define ignitionPins11_offset 646 -#define ignitionPins11_offset_hex 286 -#define ignitionPins12_offset 647 -#define ignitionPins12_offset_hex 287 -#define ignitionPins1_offset 636 -#define ignitionPins1_offset_hex 27c -#define ignitionPins2_offset 637 -#define ignitionPins2_offset_hex 27d -#define ignitionPins3_offset 638 -#define ignitionPins3_offset_hex 27e -#define ignitionPins4_offset 639 -#define ignitionPins4_offset_hex 27f -#define ignitionPins5_offset 640 -#define ignitionPins5_offset_hex 280 -#define ignitionPins6_offset 641 -#define ignitionPins6_offset_hex 281 -#define ignitionPins7_offset 642 -#define ignitionPins7_offset_hex 282 -#define ignitionPins8_offset 643 -#define ignitionPins8_offset_hex 283 -#define ignitionPins9_offset 644 -#define ignitionPins9_offset_hex 284 -#define ignitionRpmBins_offset 17376 -#define ignitionRpmBins_offset_hex 43e0 -#define ignitionTable_offset 16288 -#define ignitionTable_offset_hex 3fa0 -#define ignitionTpsBins_offset 3800 -#define ignitionTpsBins_offset_hex ed8 -#define ignitionTpsTable_offset 3288 -#define ignitionTpsTable_offset_hex cd8 -#define ignMathCalculateAtIndex_offset 1488 -#define ignMathCalculateAtIndex_offset_hex 5d0 -#define INDICATOR_NAME_AC_SWITCH "AC switch" -#define INDICATOR_NAME_BRAKE_DOWN "brake: down" -#define INDICATOR_NAME_CLUTCH_DOWN "clutch: down" -#define INDICATOR_NAME_CLUTCH_UP "clutch: up" -#define INJECTION_PIN_COUNT 12 -#define injectionMode_offset 428 -#define injectionMode_offset_hex 1ac -#define injectionPhase_offset 13984 -#define injectionPhase_offset_hex 36a0 -#define injectionPinMode_offset 648 -#define injectionPinMode_offset_hex 288 -#define injectionPins10_offset 633 -#define injectionPins10_offset_hex 279 -#define injectionPins11_offset 634 -#define injectionPins11_offset_hex 27a -#define injectionPins12_offset 635 -#define injectionPins12_offset_hex 27b -#define injectionPins1_offset 624 -#define injectionPins1_offset_hex 270 -#define injectionPins2_offset 625 -#define injectionPins2_offset_hex 271 -#define injectionPins3_offset 626 -#define injectionPins3_offset_hex 272 -#define injectionPins4_offset 627 -#define injectionPins4_offset_hex 273 -#define injectionPins5_offset 628 -#define injectionPins5_offset_hex 274 -#define injectionPins6_offset 629 -#define injectionPins6_offset_hex 275 -#define injectionPins7_offset 630 -#define injectionPins7_offset_hex 276 -#define injectionPins8_offset 631 -#define injectionPins8_offset_hex 277 -#define injectionPins9_offset 632 -#define injectionPins9_offset_hex 278 -#define injector_battLagCorr_offset 44 -#define injector_battLagCorr_offset_hex 2c -#define injector_battLagCorrBins_offset 12 -#define injector_battLagCorrBins_offset_hex c -#define injector_flow_offset 8 -#define injector_flow_offset_hex 8 -#define injector_offset 8 -#define injector_offset_hex 8 -#define injPhaseLoadBins_offset 15008 -#define injPhaseLoadBins_offset_hex 3aa0 -#define injPhaseRpmBins_offset 15072 -#define injPhaseRpmBins_offset_hex 3ae0 -#define invertPrimaryTriggerSignal_offset 1464 -#define invertPrimaryTriggerSignal_offset_hex 5b8 -#define invertSecondaryTriggerSignal_offset 1464 -#define invertSecondaryTriggerSignal_offset_hex 5b8 -#define is_enabled_spi_1_offset 744 -#define is_enabled_spi_1_offset_hex 2e8 -#define is_enabled_spi_2_offset 744 -#define is_enabled_spi_2_offset_hex 2e8 -#define is_enabled_spi_3_offset 744 -#define is_enabled_spi_3_offset_hex 2e8 -#define is_enabled_spi_4_offset 744 -#define is_enabled_spi_4_offset_hex 2e8 -#define isAlternatorControlEnabled_offset 1464 -#define isAlternatorControlEnabled_offset_hex 5b8 -#define isCJ125Enabled_offset 744 -#define isCJ125Enabled_offset_hex 2e8 -#define isCylinderCleanupEnabled_offset 1476 -#define isCylinderCleanupEnabled_offset_hex 5c4 -#define isEngineChartEnabled_offset 1464 -#define isEngineChartEnabled_offset_hex 5b8 -#define isEngineControlEnabled_offset 744 -#define isEngineControlEnabled_offset_hex 2e8 -#define isFastAdcEnabled_offset 744 -#define isFastAdcEnabled_offset_hex 2e8 -#define isFasterEngineSpinUpEnabled_offset 744 -#define isFasterEngineSpinUpEnabled_offset_hex 2e8 -#define isHip9011Enabled_offset 744 -#define isHip9011Enabled_offset_hex 2e8 -#define isIgnitionEnabled_offset 1476 -#define isIgnitionEnabled_offset_hex 5c4 -#define isInjectionEnabled_offset 1476 -#define isInjectionEnabled_offset_hex 5c4 -#define isManualSpinningMode_offset 1476 -#define isManualSpinningMode_offset_hex 5c4 -#define isMapAveragingEnabled_offset 1476 -#define isMapAveragingEnabled_offset_hex 5c4 -#define isSdCardEnabled_offset 744 -#define isSdCardEnabled_offset_hex 2e8 -#define issue_294_21_offset 76 -#define issue_294_21_offset_hex 4c -#define issue_294_22_offset 76 -#define issue_294_22_offset_hex 4c -#define issue_294_23_offset 76 -#define issue_294_23_offset_hex 4c -#define issue_294_24_offset 76 -#define issue_294_24_offset_hex 4c -#define issue_294_25_offset 76 -#define issue_294_25_offset_hex 4c -#define issue_294_26_offset 76 -#define issue_294_26_offset_hex 4c -#define issue_294_27_offset 76 -#define issue_294_27_offset_hex 4c -#define issue_294_28_offset 76 -#define issue_294_28_offset_hex 4c -#define issue_294_29_offset 76 -#define issue_294_29_offset_hex 4c -#define issue_294_30_offset 76 -#define issue_294_30_offset_hex 4c -#define issue_294_31_offset 76 -#define issue_294_31_offset_hex 4c -#define isTunerStudioEnabled_offset 1476 -#define isTunerStudioEnabled_offset_hex 5c4 -#define isVerboseAlternator_offset 744 -#define isVerboseAlternator_offset_hex 2e8 -#define isVerboseAuxPid1_offset 76 -#define isVerboseAuxPid1_offset_hex 4c -#define isVerboseAuxPid2_offset 76 -#define isVerboseAuxPid2_offset_hex 4c -#define isVerboseAuxPid3_offset 76 -#define isVerboseAuxPid3_offset_hex 4c -#define isVerboseAuxPid4_offset 76 -#define isVerboseAuxPid4_offset_hex 4c -#define isVerboseETB_offset 1464 -#define isVerboseETB_offset_hex 5b8 -#define isVerboseIAC_offset 1464 -#define isVerboseIAC_offset_hex 5b8 -#define isWaveAnalyzerEnabled_offset 1476 -#define isWaveAnalyzerEnabled_offset_hex 5c4 -#define joystickAPin_offset 939 -#define joystickAPin_offset_hex 3ab -#define joystickBPin_offset 940 -#define joystickBPin_offset_hex 3ac -#define joystickCenterPin_offset 938 -#define joystickCenterPin_offset_hex 3aa -#define joystickCPin_offset 941 -#define joystickCPin_offset_hex 3ad -#define joystickDPin_offset 942 -#define joystickDPin_offset_hex 3ae -#define knockBandCustom_offset 328 -#define knockBandCustom_offset_hex 148 -#define knockDetectionWindowEnd_offset 1504 -#define knockDetectionWindowEnd_offset_hex 5e0 -#define knockDetectionWindowStart_offset 1500 -#define knockDetectionWindowStart_offset_hex 5dc -#define knockNoise_offset 1820 -#define knockNoise_offset_hex 71c -#define knockNoiseRpmBins_offset 1852 -#define knockNoiseRpmBins_offset_hex 73c -#define knockVThreshold_offset 1512 -#define knockVThreshold_offset_hex 5e8 -#define lcdThreadPeriodMs_offset 720 -#define lcdThreadPeriodMs_offset_hex 2d0 -#define LDS_ALTERNATOR_PID_STATE_INDEX 9 -#define LDS_CJ125_PID_STATE_INDEX 10 -#define LDS_CLT_STATE_INDEX 0 -#define LDS_ENGINE_STATE_INDEX 3 -#define LDS_ETB_PID_STATE_INDEX 7 -#define LDS_FUEL_TRIM_STATE_INDEX 4 -#define LDS_IAT_STATE_INDEX 1 -#define LDS_IDLE_PID_STATE_INDEX 8 -#define LDS_SPEED_DENSITY_STATE_INDEX 2 -#define LDS_TPS_TPS_ENEICHMENT_STATE_INDEX 5 -#define LDS_TRIGGER_CENTRAL_STATE_INDEX 6 -#define LDS_TRIGGER_STATE_STATE_INDEX 11 -#define LE_COMMAND_LENGTH 200 -#define LIS302DLCsPin_offset 2043 -#define LIS302DLCsPin_offset_hex 7fb -#define logFormat_offset 496 -#define logFormat_offset_hex 1f0 -#define LOGIC_ANALYZER_CHANNEL_COUNT 4 -#define logicAnalyzerMode_offset 756 -#define logicAnalyzerMode_offset_hex 2f4 -#define logicAnalyzerPins1_offset 748 -#define logicAnalyzerPins1_offset_hex 2ec -#define logicAnalyzerPins2_offset 749 -#define logicAnalyzerPins2_offset_hex 2ed -#define logicAnalyzerPins3_offset 750 -#define logicAnalyzerPins3_offset_hex 2ee -#define logicAnalyzerPins4_offset 751 -#define logicAnalyzerPins4_offset_hex 2ef -#define MAF_DECODING_COUNT 256 -#define maf_sensor_type_e_enum "v0", "v1", "v2", "v3" -#define mafAdcChannel_offset 543 -#define mafAdcChannel_offset_hex 21f -#define mafDecoding_offset 10784 -#define mafDecoding_offset_hex 2a20 -#define mafDecodingBins_offset 11808 -#define mafDecodingBins_offset_hex 2e20 -#define mafSensorType_offset 948 -#define mafSensorType_offset_hex 3b4 -#define mainRelayPin_offset 706 -#define mainRelayPin_offset_hex 2c2 -#define mainRelayPinMode_offset 752 -#define mainRelayPinMode_offset_hex 2f0 -#define mainUnusedEnd_offset 4140 -#define mainUnusedEnd_offset_hex 102c -#define malfunctionIndicatorPin_offset 660 -#define malfunctionIndicatorPin_offset_hex 294 -#define malfunctionIndicatorPinMode_offset 661 -#define malfunctionIndicatorPinMode_offset_hex 295 -#define manIdlePosition_offset 608 -#define manIdlePosition_offset_hex 260 -#define MAP_ACCEL_TAPER 8 -#define MAP_ANGLE_SIZE 8 -#define map_offset 108 -#define map_offset_hex 6c -#define map_samplingAngle_offset 140 -#define map_samplingAngle_offset_hex 8c -#define map_samplingAngleBins_offset 108 -#define map_samplingAngleBins_offset_hex 6c -#define map_samplingWindow_offset 204 -#define map_samplingWindow_offset_hex cc -#define map_samplingWindowBins_offset 172 -#define map_samplingWindowBins_offset_hex ac -#define map_sensor_align_offset 249 -#define map_sensor_align_offset_hex f9 -#define map_sensor_highValue_offset 240 -#define map_sensor_highValue_offset_hex f0 -#define map_sensor_hwChannel_offset 248 -#define map_sensor_hwChannel_offset_hex f8 -#define map_sensor_lowValue_offset 236 -#define map_sensor_lowValue_offset_hex ec -#define map_sensor_offset 236 -#define map_sensor_offset_hex ec -#define map_sensor_type_offset 244 -#define map_sensor_type_offset_hex f4 -#define MAP_WINDOW_SIZE 8 -#define mapAccelTaperBins_offset 2136 -#define mapAccelTaperBins_offset_hex 858 -#define mapAccelTaperMult_offset 2168 -#define mapAccelTaperMult_offset_hex 878 -#define mapAveragingSchedulingAtIndex_offset 1540 -#define mapAveragingSchedulingAtIndex_offset_hex 604 -#define mapErrorDetectionTooHigh_offset 1780 -#define mapErrorDetectionTooHigh_offset_hex 6f4 -#define mapErrorDetectionTooLow_offset 1776 -#define mapErrorDetectionTooLow_offset_hex 6f0 -#define mapFrequency0Kpa_offset 612 -#define mapFrequency0Kpa_offset_hex 264 -#define mapFrequency100Kpa_offset 616 -#define mapFrequency100Kpa_offset_hex 268 -#define mapHighValueVoltage_offset 2212 -#define mapHighValueVoltage_offset_hex 8a4 -#define mapLowValueVoltage_offset 2208 -#define mapLowValueVoltage_offset_hex 8a0 -#define mapMinBufferLength_offset 812 -#define mapMinBufferLength_offset_hex 32c -#define mass_storage_e_enum "Auto", "Always", "Never" -#define max31855_cs1_offset 796 -#define max31855_cs1_offset_hex 31c -#define max31855_cs2_offset 797 -#define max31855_cs2_offset_hex 31d -#define max31855_cs3_offset 798 -#define max31855_cs3_offset_hex 31e -#define max31855_cs4_offset 799 -#define max31855_cs4_offset_hex 31f -#define max31855_cs5_offset 800 -#define max31855_cs5_offset_hex 320 -#define max31855_cs6_offset 801 -#define max31855_cs6_offset_hex 321 -#define max31855_cs7_offset 802 -#define max31855_cs7_offset_hex 322 -#define max31855_cs8_offset 803 -#define max31855_cs8_offset_hex 323 -#define max31855spiDevice_offset 675 -#define max31855spiDevice_offset_hex 2a3 -#define maxKnockSubDeg_offset 552 -#define maxKnockSubDeg_offset_hex 228 -#define mc33816_cs_offset 3107 -#define mc33816_cs_offset_hex c23 -#define mc33816_driven_offset 2607 -#define mc33816_driven_offset_hex a2f -#define mc33816_rstb_offset 2606 -#define mc33816_rstb_offset_hex a2e -#define mc33816spiDevice_offset 4001 -#define mc33816spiDevice_offset_hex fa1 -#define mc33972_cs_offset 678 -#define mc33972_cs_offset_hex 2a6 -#define mc33972_csPinMode_offset 679 -#define mc33972_csPinMode_offset_hex 2a7 -#define mc33972spiDevice_offset 4008 -#define mc33972spiDevice_offset_hex fa8 -#define measureMapOnlyInOneCylinder_offset 744 -#define measureMapOnlyInOneCylinder_offset_hex 2e8 -#define miataNb2VVTRatioFrom_offset 820 -#define miataNb2VVTRatioFrom_offset_hex 334 -#define miataNb2VVTRatioTo_offset 824 -#define miataNb2VVTRatioTo_offset_hex 338 -#define MOCK_AFR_COMMAND "mock_afr_voltage" -#define MOCK_CLT_COMMAND "mock_clt_voltage" -#define MOCK_IAT_COMMAND "mock_iat_voltage" -#define MOCK_MAF_COMMAND "mock_maf_voltage" -#define MOCK_MAP_COMMAND "mock_map_voltage" -#define MOCK_PPS_POSITION_COMMAND "mock_pps_position" -#define MOCK_PPS_VOLTAGE_COMMAND "mock_pps_voltage" -#define MOCK_TPS_COMMAND "mock_tps_voltage" -#define NARROW_BAND_WIDE_BAND_CONVERSION_SIZE 8 -#define narrowToWideOxygen_offset 2296 -#define narrowToWideOxygen_offset_hex 8f8 -#define narrowToWideOxygenBins_offset 2264 -#define narrowToWideOxygenBins_offset_hex 8d8 -#define nbVvtIndex_offset 2416 -#define nbVvtIndex_offset_hex 970 -#define needSecondTriggerInputDeprecated_offset 1476 -#define needSecondTriggerInputDeprecated_offset_hex 5c4 -#define noAccelAfterHardLimitPeriodSecs_offset 1536 -#define noAccelAfterHardLimitPeriodSecs_offset_hex 600 -#define o2heaterPin_offset 742 -#define o2heaterPin_offset_hex 2e6 -#define o2heaterPinModeTodO_offset 743 -#define o2heaterPinModeTodO_offset_hex 2e7 -#define oilPressure_align_offset 2693 -#define oilPressure_align_offset_hex a85 -#define oilPressure_hwChannel_offset 2692 -#define oilPressure_hwChannel_offset_hex a84 -#define oilPressure_offset 2692 -#define oilPressure_offset_hex a84 -#define oilPressure_v1_offset 2696 -#define oilPressure_v1_offset_hex a88 -#define oilPressure_v2_offset 2704 -#define oilPressure_v2_offset_hex a90 -#define oilPressure_value1_offset 2700 -#define oilPressure_value1_offset_hex a8c -#define oilPressure_value2_offset 2708 -#define oilPressure_value2_offset_hex a94 -#define onOffAlternatorLogic_offset 744 -#define onOffAlternatorLogic_offset_hex 2e8 -#define output_pin_e_enum "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "N/A", "N/A", "PA10", "PA11", "PA12", "PA13", "N/A", "N/A", "N/A", "N/A", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "N/A", "N/A", "N/A", "N/A", "PB12", "PB13", "N/A", "N/A", "N/A", "N/A", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "N/A", "N/A", "N/A", "N/A", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "PD15", "PD16", "N/A", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" -#define overrideCrankingIacSetting_offset 1476 -#define overrideCrankingIacSetting_offset_hex 5c4 -#define overrideCrankingIgnition_offset 516 -#define overrideCrankingIgnition_offset_hex 204 -#define pauseEtbControl_offset 744 -#define pauseEtbControl_offset_hex 2e8 -#define PEDAL_TO_TPS_SIZE 8 -#define pedalToTpsPedalBins_offset 6464 -#define pedalToTpsPedalBins_offset_hex 1940 -#define pedalToTpsRpmBins_offset 6472 -#define pedalToTpsRpmBins_offset_hex 1948 -#define pedalToTpsTable_offset 6400 -#define pedalToTpsTable_offset_hex 1900 -#define pidExtraForLowRpm_offset 3156 -#define pidExtraForLowRpm_offset_hex c54 -#define pin_mode_e_enum "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" -#define pin_output_mode_e_enum "default", "default inverted", "open collector", "open collector inverted" -#define postCrankingDurationSec_offset 2440 -#define postCrankingDurationSec_offset_hex 988 -#define postCrankingFactor_offset 2436 -#define postCrankingFactor_offset_hex 984 -#define postCrankingTargetClt_offset 2432 -#define postCrankingTargetClt_offset_hex 980 -#define primeInjFalloffTemperature_offset 1486 -#define primeInjFalloffTemperature_offset_hex 5ce -#define primingSquirtDurationMs_offset 96 -#define primingSquirtDurationMs_offset_hex 60 -#define PROTOCOL_ANALOG_CHART "analog_chart" -#define PROTOCOL_COIL1_SHORT_NAME "c1" -#define PROTOCOL_CRANK1 "t1" -#define PROTOCOL_CRANK2 "t2" -#define PROTOCOL_CRANK3 "t3" -#define PROTOCOL_DIZZY_NAME "dizzy" -#define PROTOCOL_ENGINE_SNIFFER "wave_chart" -#define PROTOCOL_ES_DOWN "d" -#define PROTOCOL_ES_UP "u" -#define PROTOCOL_HIP_NAME "HIP" -#define PROTOCOL_INJ1_SHORT_NAME "i1" -#define PROTOCOL_OUTPIN "outpin" -#define PROTOCOL_TACH_NAME "tach" -#define PROTOCOL_TEST_RESPONSE_TAG "ts_p_alive" -#define PROTOCOL_VERSION_TAG "rusEfiVersion" -#define PROTOCOL_VVT_NAME "VVT" -#define PROTOCOL_WA_CHANNEL_1 "input1" -#define PROTOCOL_WA_CHANNEL_2 "input2" -#define PROTOCOL_WA_CHANNEL_3 "input3" -#define PROTOCOL_WA_CHANNEL_4 "input4" -#define RPM_1_BYTE_PACKING_MULT 50 -#define rpmHardLimit_offset 416 -#define rpmHardLimit_offset_hex 1a0 -#define runningLedPin_offset 1813 -#define runningLedPin_offset_hex 715 -#define sdCardCsPin_offset 707 -#define sdCardCsPin_offset_hex 2c3 -#define sdCardPeriodMs_offset 804 -#define sdCardPeriodMs_offset_hex 324 -#define sdCardSpiDevice_offset 2592 -#define sdCardSpiDevice_offset_hex a20 -#define secondTriggerChannelEnabled_offset 1476 -#define secondTriggerChannelEnabled_offset_hex 5c4 -#define sensor_chart_e_enum "none", "trigger", "MAP", "RPM ACCEL", "DETAILED RPM", "INVALID" -#define sensorChartFrequency_offset 520 -#define sensorChartFrequency_offset_hex 208 -#define sensorChartMode_offset 944 -#define sensorChartMode_offset_hex 3b0 -#define sensorSnifferRpmThreshold_offset 412 -#define sensorSnifferRpmThreshold_offset_hex 19c -#define SERVO_COUNT 8 -#define servoOutputPins1_offset 3140 -#define servoOutputPins1_offset_hex c44 -#define servoOutputPins2_offset 3141 -#define servoOutputPins2_offset_hex c45 -#define servoOutputPins3_offset 3142 -#define servoOutputPins3_offset_hex c46 -#define servoOutputPins4_offset 3143 -#define servoOutputPins4_offset_hex c47 -#define servoOutputPins5_offset 3144 -#define servoOutputPins5_offset_hex c48 -#define servoOutputPins6_offset 3145 -#define servoOutputPins6_offset_hex c49 -#define servoOutputPins7_offset 3146 -#define servoOutputPins7_offset_hex c4a -#define servoOutputPins8_offset 3147 -#define servoOutputPins8_offset_hex c4b -#define showSdCardWarning_offset 76 -#define showSdCardWarning_offset_hex 4c -#define silentTriggerError_offset 1464 -#define silentTriggerError_offset_hex 5b8 -#define slowAdcAlpha_offset 2088 -#define slowAdcAlpha_offset_hex 828 -#define sparkDwellRpmBins_offset 332 -#define sparkDwellRpmBins_offset_hex 14c -#define sparkDwellValues_offset 364 -#define sparkDwellValues_offset_hex 16c -#define specs_offset 396 -#define specs_offset_hex 18c -#define spi1MisoMode_offset 2598 -#define spi1MisoMode_offset_hex a26 -#define spi1misoPin_offset 929 -#define spi1misoPin_offset_hex 3a1 -#define spi1MosiMode_offset 2597 -#define spi1MosiMode_offset_hex a25 -#define spi1mosiPin_offset 928 -#define spi1mosiPin_offset_hex 3a0 -#define spi1SckMode_offset 2596 -#define spi1SckMode_offset_hex a24 -#define spi1sckPin_offset 930 -#define spi1sckPin_offset_hex 3a2 -#define spi2MisoMode_offset 2601 -#define spi2MisoMode_offset_hex a29 -#define spi2misoPin_offset 932 -#define spi2misoPin_offset_hex 3a4 -#define spi2MosiMode_offset 2600 -#define spi2MosiMode_offset_hex a28 -#define spi2mosiPin_offset 931 -#define spi2mosiPin_offset_hex 3a3 -#define spi2SckMode_offset 2599 -#define spi2SckMode_offset_hex a27 -#define spi2sckPin_offset 933 -#define spi2sckPin_offset_hex 3a5 -#define spi3MisoMode_offset 2604 -#define spi3MisoMode_offset_hex a2c -#define spi3misoPin_offset 935 -#define spi3misoPin_offset_hex 3a7 -#define spi3MosiMode_offset 2603 -#define spi3MosiMode_offset_hex a2b -#define spi3mosiPin_offset 934 -#define spi3mosiPin_offset_hex 3a6 -#define spi3SckMode_offset 2602 -#define spi3SckMode_offset_hex a2a -#define spi3sckPin_offset 936 -#define spi3sckPin_offset_hex 3a8 -#define startOfCrankingPrimingPulse_offset 2032 -#define startOfCrankingPrimingPulse_offset_hex 7f0 -#define startUpFuelPumpDuration_offset 1892 -#define startUpFuelPumpDuration_offset_hex 764 -#define step1fuelCutEnable_offset 1464 -#define step1fuelCutEnable_offset_hex 5b8 -#define step1rpm_offset 316 -#define step1rpm_offset_hex 13c -#define step1RpmWindow_offset 1784 -#define step1RpmWindow_offset_hex 6f8 -#define step1SparkCutEnable_offset 1464 -#define step1SparkCutEnable_offset_hex 5b8 -#define step1timing_offset 320 -#define step1timing_offset_hex 140 -#define stepperDirectionPinMode_offset 3102 -#define stepperDirectionPinMode_offset_hex c1e -#define stepperEnablePin_offset 3104 -#define stepperEnablePin_offset_hex c20 -#define stepperEnablePinMode_offset 2605 -#define stepperEnablePinMode_offset_hex a2d -#define stepperForceParkingEveryRestart_offset 744 -#define stepperForceParkingEveryRestart_offset_hex 2e8 -#define stepperParkingExtraSteps_offset 818 -#define stepperParkingExtraSteps_offset_hex 332 -#define storageMode_offset 2260 -#define storageMode_offset_hex 8d4 -#define switch_input_pin_e_enum "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "N/A", "N/A", "PA10", "PA11", "PA12", "PA13", "N/A", "N/A", "N/A", "N/A", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "N/A", "N/A", "N/A", "N/A", "PB12", "PB13", "N/A", "N/A", "N/A", "N/A", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "N/A", "N/A", "N/A", "N/A", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "PD15", "PD16", "N/A", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A" -#define tachOutputPin_offset 704 -#define tachOutputPin_offset_hex 2c0 -#define tachOutputPinMode_offset 705 -#define tachOutputPinMode_offset_hex 2c1 -#define tachPulseDuractionMs_offset 1704 -#define tachPulseDuractionMs_offset_hex 6a8 -#define tachPulseDurationAsDutyCycle_offset 1464 -#define tachPulseDurationAsDutyCycle_offset_hex 5b8 -#define tachPulseTriggerIndex_offset 1708 -#define tachPulseTriggerIndex_offset_hex 6ac -#define targetVBatt_offset 2024 -#define targetVBatt_offset_hex 7e8 -#define tChargeAirCoefMax_offset 3868 -#define tChargeAirCoefMax_offset_hex f1c -#define tChargeAirCoefMin_offset 3864 -#define tChargeAirCoefMin_offset_hex f18 -#define tChargeAirDecrLimit_offset 3880 -#define tChargeAirDecrLimit_offset_hex f28 -#define tChargeAirFlowMax_offset 3872 -#define tChargeAirFlowMax_offset_hex f20 -#define tChargeAirIncrLimit_offset 3876 -#define tChargeAirIncrLimit_offset_hex f24 -#define tChargeMaxRpmMaxTps_offset 2244 -#define tChargeMaxRpmMaxTps_offset_hex 8c4 -#define tChargeMaxRpmMinTps_offset 2240 -#define tChargeMaxRpmMinTps_offset_hex 8c0 -#define tChargeMinRpmMaxTps_offset 2236 -#define tChargeMinRpmMaxTps_offset_hex 8bc -#define tChargeMinRpmMinTps_offset 2232 -#define tChargeMinRpmMinTps_offset_hex 8b8 -#define tChargeMode_e_enum "RPM+TPS (Default)", "Air Mass Interpolation" -#define tChargeMode_offset 3884 -#define tChargeMode_offset_hex f2c -#define test557pin_offset 3101 -#define test557pin_offset_hex c1d -#define throttlePedalPositionAdcChannel_offset 580 -#define throttlePedalPositionAdcChannel_offset_hex 244 -#define throttlePedalUpPin_offset 583 -#define throttlePedalUpPin_offset_hex 247 -#define throttlePedalUpPinMode_offset 710 -#define throttlePedalUpPinMode_offset_hex 2c6 -#define throttlePedalUpVoltage_offset 1884 -#define throttlePedalUpVoltage_offset_hex 75c -#define throttlePedalWOTVoltage_offset 1888 -#define throttlePedalWOTVoltage_offset_hex 760 -#define timing_offset_cylinder10_offset 2576 -#define timing_offset_cylinder10_offset_hex a10 -#define timing_offset_cylinder11_offset 2580 -#define timing_offset_cylinder11_offset_hex a14 -#define timing_offset_cylinder12_offset 2584 -#define timing_offset_cylinder12_offset_hex a18 -#define timing_offset_cylinder1_offset 2540 -#define timing_offset_cylinder1_offset_hex 9ec -#define timing_offset_cylinder2_offset 2544 -#define timing_offset_cylinder2_offset_hex 9f0 -#define timing_offset_cylinder3_offset 2548 -#define timing_offset_cylinder3_offset_hex 9f4 -#define timing_offset_cylinder4_offset 2552 -#define timing_offset_cylinder4_offset_hex 9f8 -#define timing_offset_cylinder5_offset 2556 -#define timing_offset_cylinder5_offset_hex 9fc -#define timing_offset_cylinder6_offset 2560 -#define timing_offset_cylinder6_offset_hex a00 -#define timing_offset_cylinder7_offset 2564 -#define timing_offset_cylinder7_offset_hex a04 -#define timing_offset_cylinder8_offset 2568 -#define timing_offset_cylinder8_offset_hex a08 -#define timing_offset_cylinder9_offset 2572 -#define timing_offset_cylinder9_offset_hex a0c -#define timingAdditive_offset 10072 -#define timingAdditive_offset_hex 2758 -#define timingMode_offset 448 -#define timingMode_offset_hex 1c0 -#define timingMultiplier_offset 9872 -#define timingMultiplier_offset_hex 2690 -#define tle6240_cs_offset 581 -#define tle6240_cs_offset_hex 245 -#define tle6240_csPinMode_offset 582 -#define tle6240_csPinMode_offset_hex 246 -#define tle6240spiDevice_offset 4004 -#define tle6240spiDevice_offset_hex fa4 -#define tle8888_cs_offset 3105 -#define tle8888_cs_offset_hex c21 -#define tle8888_csPinMode_offset 3106 -#define tle8888_csPinMode_offset_hex c22 -#define tle8888spiDevice_offset 4000 -#define tle8888spiDevice_offset_hex fa0 -#define TOP_DEAD_CENTER_MESSAGE "r" -#define TOTAL_CONFIG_SIZE 20000 -#define TOTAL_CONFIG_SIZE_hex 4e20 -#define tps1_1AdcChannel_offset 512 -#define tps1_1AdcChannel_offset_hex 200 -#define tps2_1AdcChannel_offset 515 -#define tps2_1AdcChannel_offset_hex 203 -#define TPS_TPS_ACCEL_TABLE 8 -#define tpsAccelEnrichmentThreshold_offset 2048 -#define tpsAccelEnrichmentThreshold_offset_hex 800 -#define tpsAccelFractionDivisor_offset 3996 -#define tpsAccelFractionDivisor_offset_hex f9c -#define tpsAccelFractionPeriod_offset 3994 -#define tpsAccelFractionPeriod_offset_hex f9a -#define tpsAccelLength_offset 2044 -#define tpsAccelLength_offset_hex 7fc -#define tpsDecelEnleanmentMultiplier_offset 2084 -#define tpsDecelEnleanmentMultiplier_offset_hex 824 -#define tpsDecelEnleanmentThreshold_offset 2080 -#define tpsDecelEnleanmentThreshold_offset_hex 820 -#define tpsErrorDetectionTooHigh_offset 86 -#define tpsErrorDetectionTooHigh_offset_hex 56 -#define tpsErrorDetectionTooLow_offset 84 -#define tpsErrorDetectionTooLow_offset_hex 54 -#define tpsMax_offset 82 -#define tpsMax_offset_hex 52 -#define tpsMin_offset 80 -#define tpsMin_offset_hex 50 -#define tpsTpsAccelFromRpmBins_offset 19232 -#define tpsTpsAccelFromRpmBins_offset_hex 4b20 -#define tpsTpsAccelTable_offset 18976 -#define tpsTpsAccelTable_offset_hex 4a20 -#define tpsTpsAccelToRpmBins_offset 19264 -#define tpsTpsAccelToRpmBins_offset_hex 4b40 -#define trigger_customSkippedToothCount_offset 536 -#define trigger_customSkippedToothCount_offset_hex 218 -#define trigger_customTotalToothCount_offset 532 -#define trigger_customTotalToothCount_offset_hex 214 -#define TRIGGER_INPUT_PIN_COUNT 3 -#define trigger_offset 524 -#define trigger_offset_hex 20c -#define TRIGGER_SIMULATOR_PIN_COUNT 3 -#define trigger_type_e_enum "custom toothed wheel", "Ford Aspire", "Dodge Neon 1995", "Miata NA", "Miata NB", "GM_7X", "Cooper R50", "Mazda SOHC 4", "60/2", "36/1", "Honda 4+24+1", "Mitsubishi", "Honda 4+24", "Honda 1+4+24", "Dodge Neon 2003", "Mazda DOHC 1+4", "1+1", "1+60/2", "Single Tooth", "Dodge Ram 1+16", "60/2 VW", "Honda 1+24", "Dodge Stratus", "36_2_2_2", "Nissan Primera", "2JZ", "Rover K", "GM LS 24", "Honda CBR 600", "2JZ_1_12", "Honda CBR 600 custom", "3/1 skipped" , "Dodge Neon 2003 crank", "Miata VVT", "trg34", "trg35", "Subaru 7+6", "Jeep 18-2-2-2", "WIP", "Dodge Neon 1995 crank only", "Jeep XJ 4 cyl", "FiatIAQ_P8", "Mazda Z5", "trg43", "trg44", "trg45", "INVALID" -#define trigger_type_offset 524 -#define trigger_type_offset_hex 20c -#define trigger_unusedCustomIsSynchronizationNeeded_offset 528 -#define trigger_unusedCustomIsSynchronizationNeeded_offset_hex 210 -#define trigger_unusedCustomNeedSecondTriggerInput_offset 528 -#define trigger_unusedCustomNeedSecondTriggerInput_offset_hex 210 -#define trigger_useOnlyFirstChannel_offset 528 -#define trigger_useOnlyFirstChannel_offset_hex 210 -#define triggerErrorPin_offset 828 -#define triggerErrorPin_offset_hex 33c -#define triggerErrorPinMode_offset 829 -#define triggerErrorPinMode_offset_hex 33d -#define triggerInputPins1_offset 700 -#define triggerInputPins1_offset_hex 2bc -#define triggerInputPins2_offset 701 -#define triggerInputPins2_offset_hex 2bd -#define triggerInputPins3_offset 702 -#define triggerInputPins3_offset_hex 2be -#define triggerSimulatorFrequency_offset 620 -#define triggerSimulatorFrequency_offset_hex 26c -#define triggerSimulatorPinModes1_offset 739 -#define triggerSimulatorPinModes1_offset_hex 2e3 -#define triggerSimulatorPinModes2_offset 740 -#define triggerSimulatorPinModes2_offset_hex 2e4 -#define triggerSimulatorPinModes3_offset 741 -#define triggerSimulatorPinModes3_offset_hex 2e5 -#define triggerSimulatorPins1_offset 736 -#define triggerSimulatorPins1_offset_hex 2e0 -#define triggerSimulatorPins2_offset 737 -#define triggerSimulatorPins2_offset_hex 2e1 -#define triggerSimulatorPins3_offset 738 -#define triggerSimulatorPins3_offset_hex 2e2 -#define TS_FILE_VERSION 20190701 -#define TS_OUTPUT_SIZE 356 -#define ts_show_cj125 true -#define ts_show_egt true -#define ts_show_etb true -#define ts_show_etb_pins true -#define ts_show_full_pinout true -#define ts_show_gps true -#define ts_show_hip9011 true -#define ts_show_joystick true -#define ts_show_lcd true -#define TS_SIGNATURE "rusEFI v1.07" -#define tunerStudioSerialSpeed_offset 728 -#define tunerStudioSerialSpeed_offset_hex 2d8 -#define twoWireBatchIgnition_offset 1476 -#define twoWireBatchIgnition_offset_hex 5c4 -#define twoWireBatchInjection_offset 1476 -#define twoWireBatchInjection_offset_hex 5c4 -#define uartConsoleSerialSpeed_offset 2076 -#define uartConsoleSerialSpeed_offset_hex 81c -#define unrealisticRpmThreashold_offset 760 -#define unrealisticRpmThreashold_offset_hex 2f8 -#define unused1234234_offset 2042 -#define unused1234234_offset_hex 7fa -#define unused_1484_bit_21_offset 1476 -#define unused_1484_bit_21_offset_hex 5c4 -#define unused_1484_bit_22_offset 1476 -#define unused_1484_bit_22_offset_hex 5c4 -#define unused_1484_bit_23_offset 1476 -#define unused_1484_bit_23_offset_hex 5c4 -#define unused_1484_bit_24_offset 1476 -#define unused_1484_bit_24_offset_hex 5c4 -#define unused_1484_bit_25_offset 1476 -#define unused_1484_bit_25_offset_hex 5c4 -#define unused_1484_bit_26_offset 1476 -#define unused_1484_bit_26_offset_hex 5c4 -#define unused_1484_bit_27_offset 1476 -#define unused_1484_bit_27_offset_hex 5c4 -#define unused_1484_bit_28_offset 1476 -#define unused_1484_bit_28_offset_hex 5c4 -#define unused_1484_bit_29_offset 1476 -#define unused_1484_bit_29_offset_hex 5c4 -#define unused_1484_bit_30_offset 1476 -#define unused_1484_bit_30_offset_hex 5c4 -#define unused_1484_bit_31_offset 1476 -#define unused_1484_bit_31_offset_hex 5c4 -#define unused_board_984_31_offset 744 -#define unused_board_984_31_offset_hex 2e8 -#define unused_former_warmup_target_afr_offset 2096 -#define unused_former_warmup_target_afr_offset_hex 830 -#define unusedAnotherOne_offset 744 -#define unusedAnotherOne_offset_hex 2e8 -#define unusedAtBoardConfigurationEnd_offset 980 -#define unusedAtBoardConfigurationEnd_offset_hex 3d4 -#define unusedErrorPin_offset 2040 -#define unusedErrorPin_offset_hex 7f8 -#define unusedFlexFuelSensor_offset 3100 -#define unusedFlexFuelSensor_offset_hex c1c -#define unusedFormerWarmupAfrPid_offset 1768 -#define unusedFormerWarmupAfrPid_offset_hex 6e8 -#define unusedOldWarmupAfr_offset 744 -#define unusedOldWarmupAfr_offset_hex 2e8 -#define unusedSpiPadding2_offset 807 -#define unusedSpiPadding2_offset_hex 327 -#define unusedSpiPadding3_offset 4036 -#define unusedSpiPadding3_offset_hex fc4 -#define unusedSpiPadding4_offset 2593 -#define unusedSpiPadding4_offset_hex a21 -#define unusedSpiPadding5_offset 2713 -#define unusedSpiPadding5_offset_hex a99 -#define unusedSpiPadding7_offset 4005 -#define unusedSpiPadding7_offset_hex fa5 -#define unusedSpiPadding8_offset 4009 -#define unusedSpiPadding8_offset_hex fa9 -#define unuseduartPadding1_offset 808 -#define unuseduartPadding1_offset_hex 328 -#define unusuedsw_offset 4020 -#define unusuedsw_offset_hex fb4 -#define unusuedvref_offset 4016 -#define unusuedvref_offset_hex fb0 -#define useAdvanceCorrectionsForCranking_offset 1476 -#define useAdvanceCorrectionsForCranking_offset_hex 5c4 -#define useBiQuadAnalogFiltering_offset 76 -#define useBiQuadAnalogFiltering_offset_hex 4c -#define useConstantDwellDuringCranking_offset 1464 -#define useConstantDwellDuringCranking_offset_hex 5b8 -#define useETBforIdleControl_offset 744 -#define useETBforIdleControl_offset_hex 2e8 -#define useFixedBaroCorrFromMap_offset 1476 -#define useFixedBaroCorrFromMap_offset_hex 5c4 -#define useFSIO10ForServo3_offset 1464 -#define useFSIO10ForServo3_offset_hex 5b8 -#define useFSIO11ForServo4_offset 1464 -#define useFSIO11ForServo4_offset_hex 5b8 -#define useFSIO12ForIdleOffset_offset 1464 -#define useFSIO12ForIdleOffset_offset_hex 5b8 -#define useFSIO12ForServo5_offset 1464 -#define useFSIO12ForServo5_offset_hex 5b8 -#define useFSIO13ForIdleMinValue_offset 1464 -#define useFSIO13ForIdleMinValue_offset_hex 5b8 -#define useFSIO15ForIdleRpmAdjustment_offset 1464 -#define useFSIO15ForIdleRpmAdjustment_offset_hex 5b8 -#define useFSIO16ForTimingAdjustment_offset 1464 -#define useFSIO16ForTimingAdjustment_offset_hex 5b8 -#define useFSIO4ForSeriousEngineWarning_offset 1464 -#define useFSIO4ForSeriousEngineWarning_offset_hex 5b8 -#define useFSIO5ForCriticalIssueEngineStop_offset 1464 -#define useFSIO5ForCriticalIssueEngineStop_offset_hex 5b8 -#define useFSIO6ForRevLimiter_offset 1464 -#define useFSIO6ForRevLimiter_offset_hex 5b8 -#define useFSIO8ForServo1_offset 1464 -#define useFSIO8ForServo1_offset_hex 5b8 -#define useFSIO9ForServo2_offset 1464 -#define useFSIO9ForServo2_offset_hex 5b8 -#define useIacTableForCoasting_offset 744 -#define useIacTableForCoasting_offset_hex 2e8 -#define useIdleTimingPidControl_offset 744 -#define useIdleTimingPidControl_offset_hex 2e8 -#define useInstantRpmForIdle_offset 76 -#define useInstantRpmForIdle_offset_hex 4c -#define useLcdScreen_offset 744 -#define useLcdScreen_offset_hex 2e8 -#define useLinearCltSensor_offset 1464 -#define useLinearCltSensor_offset_hex 5b8 -#define useLinearIatSensor_offset 1464 -#define useLinearIatSensor_offset_hex 5b8 -#define useNoiselessTriggerDecoder_offset 744 -#define useNoiselessTriggerDecoder_offset_hex 2e8 -#define useOnlyRisingEdgeForTrigger_offset 1476 -#define useOnlyRisingEdgeForTrigger_offset_hex 5c4 -#define useSeparateAdvanceForCranking_offset 1476 -#define useSeparateAdvanceForCranking_offset_hex 5c4 -#define useSeparateAdvanceForIdle_offset 1476 -#define useSeparateAdvanceForIdle_offset_hex 5c4 -#define useSeparateVeForIdle_offset 1476 -#define useSeparateVeForIdle_offset_hex 5c4 -#define useSerialPort_offset 744 -#define useSerialPort_offset_hex 2e8 -#define useStepperIdle_offset 744 -#define useStepperIdle_offset_hex 2e8 -#define useTLE8888_cranking_hack_offset 76 -#define useTLE8888_cranking_hack_offset_hex 4c -#define useTLE8888_hall_mode_offset 76 -#define useTLE8888_hall_mode_offset_hex 4c -#define useTpicAdvancedMode_offset 744 -#define useTpicAdvancedMode_offset_hex 2e8 -#define useTPSAdvanceTable_offset 1476 -#define useTPSAdvanceTable_offset_hex 5c4 -#define useTPSBasedVeTable_offset 744 -#define useTPSBasedVeTable_offset_hex 2e8 -#define VBAT_INJECTOR_CURVE_SIZE 8 -#define vbattAdcChannel_offset 513 -#define vbattAdcChannel_offset_hex 201 -#define vbattDividerCoeff_offset 464 -#define vbattDividerCoeff_offset_hex 1d0 -#define vehicleSpeedCoef_offset 476 -#define vehicleSpeedCoef_offset_hex 1dc -#define vehicleSpeedSensorInputPin_offset 968 -#define vehicleSpeedSensorInputPin_offset_hex 3c8 -#define veLoadBins_offset 18464 -#define veLoadBins_offset_hex 4820 -#define verboseTriggerSynchDetails_offset 1476 -#define verboseTriggerSynchDetails_offset_hex 5c4 -#define veRpmBins_offset 18528 -#define veRpmBins_offset_hex 4860 -#define veTable_offset 17440 -#define veTable_offset_hex 4420 -#define vRefAdcChannel_offset 1470 -#define vRefAdcChannel_offset_hex 5be -#define vvt_mode_e_enum "First half", "Second half", "2GZ", "Miata NB2", "mode4", "mode5", "mode6", "mode7" -#define vvtCamSensorUseRise_offset 744 -#define vvtCamSensorUseRise_offset_hex 2e8 -#define vvtDisplayInverted_offset 1464 -#define vvtDisplayInverted_offset_hex 5b8 -#define vvtMode_offset 2328 -#define vvtMode_offset_hex 918 -#define vvtOffset_offset 2052 -#define vvtOffset_offset_hex 804 -#define warningLedPin_offset 2041 -#define warningLedPin_offset_hex 7f9 -#define warningPeriod_offset 1498 -#define warningPeriod_offset_hex 5da -#define wboHeaterPin_offset 673 -#define wboHeaterPin_offset_hex 2a1 -#define wwaeBeta_offset 1808 -#define wwaeBeta_offset_hex 710 -#define wwaeTau_offset 1712 -#define wwaeTau_offset_hex 6b0 // start of pid_s struct pid_s { /** * offset 0 */ - float pFactor = (float)0; + float pFactor; /** * offset 4 */ - float iFactor = (float)0; + float iFactor; /** * offset 8 */ - float dFactor = (float)0; + float dFactor; /** * Linear addition to PID logic * offset 12 */ - int16_t offset = (int16_t)0; + int16_t offset; /** * PID dTime * offset 14 */ - int16_t periodMs = (int16_t)0; + int16_t periodMs; /** * Output min value * offset 16 */ - int16_t minValue = (int16_t)0; + int16_t minValue; /** * Output max value * offset 18 */ - int16_t maxValue = (int16_t)0; + int16_t maxValue; /** total size 20*/ }; @@ -2105,13 +49,13 @@ struct cranking_parameters_s { * 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. * offset 0 */ - float baseFuel = (float)0; + float baseFuel; /** * This sets the RPM limit below which the ECU will use cranking fuel and ignition logic, typically this is around 350-450rpm. * set cranking_rpm X * offset 4 */ - int16_t rpm = (int16_t)0; + int16_t rpm; /** * need 4 byte alignment * offset 6 @@ -2140,7 +84,7 @@ struct spi_pins { * need 4 byte alignment * offset 3 */ - uint8_t alignmentFill = (uint8_t)0; + uint8_t alignmentFill; /** total size 4*/ }; @@ -2152,12 +96,12 @@ struct air_pressure_sensor_config_s { * kPa value at low volts * offset 0 */ - float lowValue = (float)0; + float lowValue; /** * kPa value at high volts * offset 4 */ - float highValue = (float)0; + float highValue; /** * offset 8 */ @@ -2218,32 +162,32 @@ struct thermistor_conf_s { * these values are in Celcius * offset 0 */ - float tempC_1 = (float)0; + float tempC_1; /** * offset 4 */ - float tempC_2 = (float)0; + float tempC_2; /** * offset 8 */ - float tempC_3 = (float)0; + float tempC_3; /** * offset 12 */ - float resistance_1 = (float)0; + float resistance_1; /** * offset 16 */ - float resistance_2 = (float)0; + float resistance_2; /** * offset 20 */ - float resistance_3 = (float)0; + float resistance_3; /** * Pull-up resistor value on your board * offset 24 */ - float bias_resistor = (float)0; + float bias_resistor; /** total size 28*/ }; @@ -2266,19 +210,19 @@ struct oil_pressure_config_s { /** * offset 4 */ - float v1 = (float)0; + float v1; /** * offset 8 */ - float value1 = (float)0; + float value1; /** * offset 12 */ - float v2 = (float)0; + float v2; /** * offset 16 */ - float value2 = (float)0; + float value2; /** total size 20*/ }; @@ -2317,7 +261,7 @@ struct injector_s { * g/s = 0.0119997981 * cc/min * offset 0 */ - float flow = (float)0; + float flow; /** * set_flat_injector_lag LAG * set_injector_lag VOLTAGE LAG @@ -2339,23 +283,23 @@ struct bi_quard_s { /** * offset 0 */ - float a0 = (float)0; + float a0; /** * offset 4 */ - float a1 = (float)0; + float a1; /** * offset 8 */ - float a2 = (float)0; + float a2; /** * offset 12 */ - float b1 = (float)0; + float b1; /** * offset 16 */ - float b2 = (float)0; + float b2; /** total size 20*/ }; @@ -2368,7 +312,7 @@ struct specs_s { * see also cylindersCount * offset 0 */ - float displacement = (float)0; + float displacement; /** * offset 4 */ @@ -2406,11 +350,11 @@ struct trigger_config_s { /** * offset 8 */ - int customTotalToothCount = (int)0; + int customTotalToothCount; /** * offset 12 */ - int customSkippedToothCount = (int)0; + int customSkippedToothCount; /** total size 16*/ }; @@ -2429,19 +373,19 @@ struct afr_sensor_s { /** * offset 4 */ - float v1 = (float)0; + float v1; /** * offset 8 */ - float value1 = (float)0; + float value1; /** * offset 12 */ - float v2 = (float)0; + float v2; /** * offset 16 */ - float value2 = (float)0; + float value2; /** total size 20*/ }; @@ -2452,7 +396,7 @@ struct idle_hardware_s { /** * offset 0 */ - int solenoidFrequency = (int)0; + int solenoidFrequency; /** * offset 4 */ @@ -2507,22 +451,22 @@ struct board_configuration_s { * value between 0 and 100 used in Manual mode * offset 8 */ - float manIdlePosition = (float)0; + float manIdlePosition; /** * offset 12 */ - float mapFrequency0Kpa = (float)0; + float mapFrequency0Kpa; /** * offset 16 */ - float mapFrequency100Kpa = (float)0; + float mapFrequency100Kpa; /** * Same RPM is used for two ways of producing simulated RPM. See also triggerSimulatorPins (with wires) * See also directSelfStimulation (no wires, bypassing input hardware) * rpm X * offset 20 */ - int triggerSimulatorFrequency = (int)0; + int triggerSimulatorFrequency; /** * offset 24 */ @@ -2651,17 +595,22 @@ struct board_configuration_s { */ pin_output_mode_e mc33972_csPinMode; /** + * Useful in Research&Development phase * offset 80 */ - etb_io etb1; + adc_channel_e auxFastSensor1_adcChannel; + /** + * offset 81 + */ + uint8_t unused556[3]; /** * offset 84 */ - float fuelLevelEmptyTankVoltage = (float)0; + float fuelLevelEmptyTankVoltage; /** * offset 88 */ - float fuelLevelFullTankVoltage = (float)0; + float fuelLevelFullTankVoltage; /** * AFR, WBO, EGO - whatever you like to call it * offset 92 @@ -2670,7 +619,7 @@ struct board_configuration_s { /** * offset 96 */ - float fuelClosedLoopAfrLowThreshold = (float)0; + float fuelClosedLoopAfrLowThreshold; /** * offset 100 */ @@ -2715,23 +664,23 @@ struct board_configuration_s { /** * offset 112 */ - int idleThreadPeriodMs = (int)0; + int idleThreadPeriodMs; /** * offset 116 */ - int consoleLoopPeriodMs = (int)0; + int consoleLoopPeriodMs; /** * offset 120 */ - int lcdThreadPeriodMs = (int)0; + int lcdThreadPeriodMs; /** * offset 124 */ - int generalPeriodicThreadPeriodMs = (int)0; + int generalPeriodicThreadPeriodMs; /** * offset 128 */ - uint32_t tunerStudioSerialSpeed = (uint32_t)0; + uint32_t tunerStudioSerialSpeed; /** * offset 132 */ @@ -2888,7 +837,7 @@ struct board_configuration_s { /** * offset 160 */ - int unrealisticRpmThreashold = (int)0; + int unrealisticRpmThreashold; /** * offset 164 */ @@ -2906,7 +855,7 @@ struct board_configuration_s { * SD card logging period, in milliseconds * offset 204 */ - int16_t sdCardPeriodMs = (int16_t)0; + int16_t sdCardPeriodMs; /** * offset 206 */ @@ -2914,33 +863,41 @@ struct board_configuration_s { /** * offset 207 */ - uint8_t unusedSpiPadding2 = (uint8_t)0; + brain_pin_e debugMapAveraging; /** * offset 208 */ - uint8_t unuseduartPadding1[4]; + brain_pin_e starterRelayPin; + /** + * offset 209 + */ + pin_output_mode_e starterRelayPinMode; + /** + * offset 210 + */ + uint8_t unuseduartPadding1[2]; /** * offset 212 */ - int mapMinBufferLength = (int)0; + int mapMinBufferLength; /** * offset 216 */ - int16_t idlePidDeactivationTpsThreshold = (int16_t)0; + int16_t idlePidDeactivationTpsThreshold; /** * offset 218 */ - int16_t stepperParkingExtraSteps = (int16_t)0; + int16_t stepperParkingExtraSteps; /** * This magic property is specific to Mazda Miata NB2 * offset 220 */ - float miataNb2VVTRatioFrom = (float)0; + float miataNb2VVTRatioFrom; /** * This magic property is specific to Mazda Miata NB2 * offset 224 */ - float miataNb2VVTRatioTo = (float)0; + float miataNb2VVTRatioTo; /** * This pin is used for debugging - snap a logic analyzer on it and see if it's ever high * offset 228 @@ -3037,48 +994,7 @@ struct board_configuration_s { * offset 344 */ sensor_chart_e sensorChartMode; - /** - * offset 348 - */ - maf_sensor_type_e mafSensorType; - /** - * todo:not finished - * These input pins allow us to pull toggle buttons state - * offset 352 - */ - brain_pin_e fsioDigitalInputs[FSIO_COMMAND_COUNT]; - /** - * offset 368 - */ - brain_input_pin_e vehicleSpeedSensorInputPin; - /** - * Some vehicles have a switch to indicate that clutch pedal is all the way up - * offset 369 - */ - switch_input_pin_e clutchUpPin; - /** - * offset 370 - */ - brain_input_pin_e frequencyReportingMapInputPin; - /** - * offset 371 - */ - pin_input_mode_e clutchUpPinMode; - /** - * offset 372 - */ - float etbIdleRange = (float)0; - /** - offset 376 bit 0 */ - bool clutchUpPinInverted : 1; - /** - offset 376 bit 1 */ - bool clutchDownPinInverted : 1; - /** - * offset 380 - */ - int unusedAtBoardConfigurationEnd[121]; - /** total size 864*/ + /** total size 348*/ }; typedef struct board_configuration_s board_configuration_s; @@ -3096,7 +1012,7 @@ struct engine_configuration_s { * set engineSnifferRpmThreshold X * offset 4 */ - int engineSnifferRpmThreshold = (int)0; + int engineSnifferRpmThreshold; /** * offset 8 */ @@ -3142,10 +1058,10 @@ struct engine_configuration_s { bool cj125isLsu49 : 1; /** offset 76 bit 12 */ - bool etb1_use_two_wires : 1; + bool etb_use_two_wires : 1; /** offset 76 bit 13 */ - bool etb2_use_two_wires : 1; + bool unusedHereo_wires : 1; /** offset 76 bit 14 */ bool showSdCardWarning : 1; @@ -3201,29 +1117,28 @@ struct engine_configuration_s { bool issue_294_31 : 1; /** * Closed throttle. todo: extract these two fields into a structure - * todo: we need two sets of TPS parameters - modern ETBs have two sensors * See also tps1_1AdcChannel * set tps_min X * offset 80 */ - int16_t tpsMin = (int16_t)0; + int16_t tpsMin; /** * Full throttle. tpsMax value as 10 bit ADC value. Not Voltage! * See also tps1_1AdcChannel * set tps_max X * offset 82 */ - int16_t tpsMax = (int16_t)0; + int16_t tpsMax; /** * TPS error detection, what TPS % value is unrealistically low * offset 84 */ - int16_t tpsErrorDetectionTooLow = (int16_t)0; + int16_t tpsErrorDetectionTooLow; /** * TPS error detection, what TPS % value is unrealistically high * offset 86 */ - int16_t tpsErrorDetectionTooHigh = (int16_t)0; + int16_t tpsErrorDetectionTooHigh; /** * offset 88 */ @@ -3231,19 +1146,19 @@ struct engine_configuration_s { /** * offset 96 */ - float primingSquirtDurationMs = (float)0; + float primingSquirtDurationMs; /** * Used if useConstantDwellDuringCranking is TRUE * offset 100 */ - float ignitionDwellForCrankingMs = (float)0; + float ignitionDwellForCrankingMs; /** * While cranking (which causes battery voltage to drop) we can calculate dwell time in shaft * degrees, not in absolute time as in running mode. * set cranking_charge_angle X * offset 104 */ - float crankingChargeAngle = (float)0; + float crankingChargeAngle; /** * @see hasMapSensor * @see isMapAveragingEnabled @@ -3263,24 +1178,24 @@ struct engine_configuration_s { * A secondary Rev limit engaged by the driver to help launch the vehicle faster * offset 316 */ - int step1rpm = (int)0; + int step1rpm; /** * offset 320 */ - int step1timing = (int)0; + int step1timing; /** * value '6' for 8MHz hw osc * read hip9011 datasheet for details * todo split into two bit fields * offset 324 */ - int hip9011PrescalerAndSDO = (int)0; + int hip9011PrescalerAndSDO; /** * We calculate knock band based of cylinderBore * Use this to override - kHz knock band override * offset 328 */ - float knockBandCustom = (float)0; + float knockBandCustom; /** * On single-coil or wasted spark setups you have to lower dwell at high RPM * offset 332 @@ -3298,17 +1213,17 @@ struct engine_configuration_s { * Cylinder diameter, in mm. * offset 408 */ - float cylinderBore = (float)0; + float cylinderBore; /** * Disable sensor sniffer above this rpm * offset 412 */ - int sensorSnifferRpmThreshold = (int)0; + int sensorSnifferRpmThreshold; /** * set rpm_hard_limit X * offset 416 */ - int rpmHardLimit = (int)0; + int rpmHardLimit; /** * This setting controls which fuel quantity control algorithm is used. * See also useTPSAdvanceTable @@ -3334,13 +1249,13 @@ struct engine_configuration_s { * todo: do we need even need this since we have the map anyway? * offset 432 */ - angle_t extraInjectionOffset = (angle_t)0; + angle_t extraInjectionOffset; /** * Ignition advance angle used during engine cranking, 5-10 degrees will work as a base setting for most engines. * set cranking_timing_angle X * offset 436 */ - angle_t crankingTimingAngle = (angle_t)0; + 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 * set ignition_mode X @@ -3351,7 +1266,7 @@ struct engine_configuration_s { * this value could be used to offset the whole ignition timing table by a constant * offset 444 */ - angle_t ignitionOffset = (angle_t)0; + angle_t ignitionOffset; /** * 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). * offset 448 @@ -3362,39 +1277,39 @@ struct engine_configuration_s { * This mode is useful when adjusting distributor location. * offset 452 */ - angle_t fixedModeTiming = (angle_t)0; + angle_t fixedModeTiming; /** * Angle between Top Dead Center (TDC) and the first trigger event. * Knowing this angle allows us to control timing and other angles in reference to TDC. * set global_trigger_offset_angle X * offset 456 */ - angle_t globalTriggerAngleOffset = (angle_t)0; + angle_t globalTriggerAngleOffset; /** * Coefficient of input voltage dividers on your PCB * offset 460 */ - float analogInputDividerCoefficient = (float)0; + float analogInputDividerCoefficient; /** * 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. * offset 464 */ - float vbattDividerCoeff = (float)0; + float vbattDividerCoeff; /** * Cooling fan turn-on temperature threshold, in Celsius * offset 468 */ - float fanOnTemperature = (float)0; + float fanOnTemperature; /** * Cooling fan turn-off temperature threshold, in Celsius * offset 472 */ - float fanOffTemperature = (float)0; + float fanOffTemperature; /** * This coefficient translates vehicle speed input frequency (in Hz) into vehicle speed, km/h * offset 476 */ - float vehicleSpeedCoef = (float)0; + float vehicleSpeedCoef; /** * set can_mode X * offset 480 @@ -3404,7 +1319,7 @@ struct engine_configuration_s { * CANbus thread period, ms * offset 484 */ - int canSleepPeriodMs = (int)0; + int canSleepPeriodMs; /** * '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 * See engineCycle @@ -3423,15 +1338,15 @@ struct engine_configuration_s { /** * offset 500 */ - int byFirmwareVersion = (int)0; + int byFirmwareVersion; /** * offset 504 */ - int HD44780width = (int)0; + int HD44780width; /** * offset 508 */ - int HD44780height = (int)0; + int HD44780height; /** * First TPS, single channel so far. See also pedalPositionAdcChannel * offset 512 @@ -3455,11 +1370,11 @@ struct engine_configuration_s { /** * offset 516 */ - int overrideCrankingIgnition = (int)0; + int overrideCrankingIgnition; /** * offset 520 */ - int sensorChartFrequency = (int)0; + int sensorChartFrequency; /** * offset 524 */ @@ -3485,17 +1400,17 @@ struct engine_configuration_s { * set global_fuel_correction X * offset 544 */ - float globalFuelCorrection = (float)0; + float globalFuelCorrection; /** * offset 548 */ - float adcVcc = (float)0; + float adcVcc; /** * maximum total number of degrees to subtract from ignition advance * when knocking * offset 552 */ - float maxKnockSubDeg = (float)0; + float maxKnockSubDeg; /** * 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. * TODO #660 @@ -3535,6 +1450,51 @@ struct engine_configuration_s { * offset 600 */ board_configuration_s bc; + /** + * offset 948 + */ + maf_sensor_type_e mafSensorType; + /** + * todo:not finished + * These input pins allow us to pull toggle buttons state + * offset 952 + */ + brain_pin_e fsioDigitalInputs[FSIO_COMMAND_COUNT]; + /** + * offset 968 + */ + brain_input_pin_e vehicleSpeedSensorInputPin; + /** + * Some vehicles have a switch to indicate that clutch pedal is all the way up + * offset 969 + */ + switch_input_pin_e clutchUpPin; + /** + * offset 970 + */ + brain_input_pin_e frequencyReportingMapInputPin; + /** + * offset 971 + */ + pin_input_mode_e clutchUpPinMode; + /** + * offset 972 + */ + float unused; + /** + offset 976 bit 0 */ + bool todoClutchUpPinInverted : 1; + /** + offset 976 bit 1 */ + bool todoClutchDownPinInverted : 1; + /** + * offset 980 + */ + etb_io etbIo[ETB_COUNT]; + /** + * offset 988 + */ + int unusedAtOldBoardConfigurationEnd[119]; /** offset 1464 bit 0 */ bool vvtDisplayInverted : 1; @@ -3660,7 +1620,7 @@ struct engine_configuration_s { * Expected neutral position * offset 1471 */ - uint8_t etbNeutralPosition = (uint8_t)0; + uint8_t etbNeutralPosition; /** * See also idleRpmPid * offset 1472 @@ -3748,8 +1708,9 @@ struct engine_configuration_s { offset 1476 bit 20 */ bool etbCalibrationOnStart : 1; /** + * This flag allows to use a special 'PID Multiplier' table (0.0-1.0) to compensate for nonlinear nature of IAC-RPM controller offset 1476 bit 21 */ - bool unused_1484_bit_21 : 1; + bool useIacPidMultTable : 1; /** offset 1476 bit 22 */ bool unused_1484_bit_22 : 1; @@ -3783,55 +1744,55 @@ struct engine_configuration_s { /** * offset 1480 */ - uint32_t engineChartSize = (uint32_t)0; + uint32_t engineChartSize; /** * Relative to the target idle RPM * offset 1484 */ - int16_t idlePidRpmUpperLimit = (int16_t)0; + int16_t idlePidRpmUpperLimit; /** * 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. * offset 1486 */ - int16_t primeInjFalloffTemperature = (int16_t)0; + int16_t primeInjFalloffTemperature; /** * At what trigger index should some ignition-related math be executed? This is a performance trick to reduce load on synchronization trigger callback. * offset 1488 */ - int ignMathCalculateAtIndex = (int)0; + int ignMathCalculateAtIndex; /** * offset 1492 */ - int16_t acCutoffLowRpm = (int16_t)0; + int16_t acCutoffLowRpm; /** * offset 1494 */ - int16_t acCutoffHighRpm = (int16_t)0; + int16_t acCutoffHighRpm; /** * offset 1496 */ - int16_t acIdleRpmBump = (int16_t)0; + int16_t acIdleRpmBump; /** * set warningPeriod X * offset 1498 */ - int16_t warningPeriod = (int16_t)0; + int16_t warningPeriod; /** * offset 1500 */ - float knockDetectionWindowStart = (float)0; + float knockDetectionWindowStart; /** * offset 1504 */ - float knockDetectionWindowEnd = (float)0; + float knockDetectionWindowEnd; /** * offset 1508 */ - float idleStepperReactionTime = (float)0; + float idleStepperReactionTime; /** * offset 1512 */ - float knockVThreshold = (float)0; + float knockVThreshold; /** * offset 1516 */ @@ -3839,17 +1800,17 @@ struct engine_configuration_s { /** * offset 1532 */ - int idleStepperTotalSteps = (int)0; + int idleStepperTotalSteps; /** * TODO: finish this #413 * offset 1536 */ - float noAccelAfterHardLimitPeriodSecs = (float)0; + float noAccelAfterHardLimitPeriodSecs; /** * At what trigger index should some MAP-related math be executed? This is a performance trick to reduce load on synchronization trigger callback. * offset 1540 */ - int mapAveragingSchedulingAtIndex = (int)0; + int mapAveragingSchedulingAtIndex; /** * offset 1544 */ @@ -3874,17 +1835,17 @@ struct engine_configuration_s { /** * offset 1704 */ - float tachPulseDuractionMs = (float)0; + float tachPulseDuractionMs; /** * Trigger cycle index at which we start tach pulse (performance consideration) * offset 1708 */ - int tachPulseTriggerIndex = (int)0; + int tachPulseTriggerIndex; /** * Length of time the deposited wall fuel takes to dissipate after the start of acceleration. * offset 1712 */ - float wwaeTau = (float)0; + float wwaeTau; /** * offset 1716 */ @@ -3896,34 +1857,48 @@ struct engine_configuration_s { /** * offset 1756 */ - float fuelRailPressure = (float)0; + float fuelRailPressure; /** * offset 1760 */ - float alternator_derivativeFilterLoss = (float)0; + float alternator_derivativeFilterLoss; /** * offset 1764 */ - float alternator_antiwindupFreq = (float)0; + float alternator_antiwindupFreq; /** + * Closed throttle#2. todo: extract these two fields into a structure + * See also tps2_1AdcChannel + * set tps2_min X * offset 1768 */ - uint8_t unusedFormerWarmupAfrPid[8]; + int16_t tps2Min; + /** + * Full throttle#2. tpsMax value as 10 bit ADC value. Not Voltage! + * See also tps1_1AdcChannel + * set tps2_max X + * offset 1770 + */ + int16_t tps2Max; + /** + * offset 1772 + */ + uint8_t unusedFormerWarmupAfrPid[4]; /** * kPa value which is too low to be true * offset 1776 */ - float mapErrorDetectionTooLow = (float)0; + float mapErrorDetectionTooLow; /** * kPa value which is too high to be true * offset 1780 */ - float mapErrorDetectionTooHigh = (float)0; + float mapErrorDetectionTooHigh; /** * RPMs prior to step1rpm point where ignition advance is retarded * offset 1784 */ - int step1RpmWindow = (int)0; + int step1RpmWindow; /** * See cltIdleRpmBins * offset 1788 @@ -3933,7 +1908,7 @@ struct engine_configuration_s { * 0 = No fuel settling on port walls 1 = All the fuel settling on port walls setting this to 0 disables the wall wetting enrichment. * offset 1808 */ - float wwaeBeta = (float)0; + float wwaeBeta; /** * blue LED on discovery by default * offset 1812 @@ -3978,22 +1953,22 @@ struct engine_configuration_s { /** * offset 1884 */ - float throttlePedalUpVoltage = (float)0; + float throttlePedalUpVoltage; /** * Pedal in the floor * offset 1888 */ - float throttlePedalWOTVoltage = (float)0; + float throttlePedalWOTVoltage; /** * on ECU start turn fuel pump on to build fuel pressure * offset 1892 */ - int16_t startUpFuelPumpDuration = (int16_t)0; + int16_t startUpFuelPumpDuration; /** * If RPM is close enough let's leave IAC alone, and maybe engage timing PID correction * offset 1894 */ - int16_t idlePidRpmDeadZone = (int16_t)0; + int16_t idlePidRpmDeadZone; /** * CLT-based target RPM for automatic idle controller * offset 1896 @@ -4008,12 +1983,12 @@ struct engine_configuration_s { * This is the target battery voltage the alternator PID control will attempt to maintain * offset 2024 */ - float targetVBatt = (float)0; + float targetVBatt; /** * Turns off alternator output above specified TPS, enabling this reduced parasitic drag on the engine at full load. * offset 2028 */ - float alternatorOffAboveTps = (float)0; + float alternatorOffAboveTps; /** * Prime pulse for cold engine, duration in ms * Linear interpolation between -40F/-40C and fallout temperature @@ -4022,17 +1997,17 @@ struct engine_configuration_s { * set cranking_priming_pulse X * offset 2032 */ - float startOfCrankingPrimingPulse = (float)0; + float startOfCrankingPrimingPulse; /** * 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. * offset 2036 */ - int16_t afterCrankingIACtaperDuration = (int16_t)0; + int16_t afterCrankingIACtaperDuration; /** * Extra IAC, in percent between 0 and 100, tapered between zero and idle deactivation TPS value * offset 2038 */ - int16_t iacByTpsTaper = (int16_t)0; + int16_t iacByTpsTaper; /** * offset 2040 */ @@ -4053,55 +2028,55 @@ struct engine_configuration_s { * 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. * offset 2044 */ - int tpsAccelLength = (int)0; + int tpsAccelLength; /** * 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. * offset 2048 */ - float tpsAccelEnrichmentThreshold = (float)0; + float tpsAccelEnrichmentThreshold; /** * Angle between cam sensor and VVT zero position * set vvt_offset X * offset 2052 */ - float vvtOffset = (float)0; + float vvtOffset; /** * offset 2056 */ - int engineLoadAccelLength = (int)0; + int engineLoadAccelLength; /** * offset 2060 */ - float engineLoadDecelEnleanmentThreshold = (float)0; + float engineLoadDecelEnleanmentThreshold; /** * offset 2064 */ - float engineLoadDecelEnleanmentMultiplier = (float)0; + float engineLoadDecelEnleanmentMultiplier; /** * offset 2068 */ - float engineLoadAccelEnrichmentThreshold = (float)0; + float engineLoadAccelEnrichmentThreshold; /** * offset 2072 */ - float engineLoadAccelEnrichmentMultiplier = (float)0; + float engineLoadAccelEnrichmentMultiplier; /** * offset 2076 */ - uint32_t uartConsoleSerialSpeed = (uint32_t)0; + uint32_t uartConsoleSerialSpeed; /** * offset 2080 */ - float tpsDecelEnleanmentThreshold = (float)0; + float tpsDecelEnleanmentThreshold; /** * offset 2084 */ - float tpsDecelEnleanmentMultiplier = (float)0; + float tpsDecelEnleanmentMultiplier; /** * ExpAverage alpha coefficient * offset 2088 */ - float slowAdcAlpha = (float)0; + float slowAdcAlpha; /** * See http://rusefi.com/s/debugmode * @@ -4117,7 +2092,7 @@ struct engine_configuration_s { * kPa value at which we need to cut fuel and spark, 0 if not enabled * offset 2132 */ - float boostCutPressure = (float)0; + float boostCutPressure; /** * offset 2136 */ @@ -4135,22 +2110,22 @@ struct engine_configuration_s { * Fixed timing, useful for TDC testing * offset 2204 */ - float fixedTiming = (float)0; + float fixedTiming; /** * MAP voltage for low point * offset 2208 */ - float mapLowValueVoltage = (float)0; + float mapLowValueVoltage; /** * MAP voltage for low point * offset 2212 */ - float mapHighValueVoltage = (float)0; + float mapHighValueVoltage; /** * EGO value correction * offset 2216 */ - float egoValueShift = (float)0; + float egoValueShift; /** * offset 2220 */ @@ -4176,23 +2151,23 @@ struct engine_configuration_s { * This is the IAC position during cranking, some engines start better if given more air during cranking to improve cylinder filling. * offset 2228 */ - int crankingIACposition = (int)0; + int crankingIACposition; /** * offset 2232 */ - float tChargeMinRpmMinTps = (float)0; + float tChargeMinRpmMinTps; /** * offset 2236 */ - float tChargeMinRpmMaxTps = (float)0; + float tChargeMinRpmMaxTps; /** * offset 2240 */ - float tChargeMaxRpmMinTps = (float)0; + float tChargeMaxRpmMinTps; /** * offset 2244 */ - float tChargeMaxRpmMaxTps = (float)0; + float tChargeMaxRpmMaxTps; /** * offset 2248 */ @@ -4200,7 +2175,7 @@ struct engine_configuration_s { /** * offset 2256 */ - int alternatorPwmFrequency = (int)0; + int alternatorPwmFrequency; /** * offset 2260 */ @@ -4235,33 +2210,33 @@ struct engine_configuration_s { /** * offset 2416 */ - int nbVvtIndex = (int)0; + int nbVvtIndex; /** * offset 2420 */ - float autoTuneCltThreshold = (float)0; + float autoTuneCltThreshold; /** * offset 2424 */ - float autoTuneTpsRocThreshold = (float)0; + float autoTuneTpsRocThreshold; /** * offset 2428 */ - float autoTuneTpsQuietPeriod = (float)0; + float autoTuneTpsQuietPeriod; /** * offset 2432 */ - float postCrankingTargetClt = (float)0; + float postCrankingTargetClt; /** * Fuel multiplier taper, see also postCrankingDurationSec * offset 2436 */ - float postCrankingFactor = (float)0; + float postCrankingFactor; /** * See also postCrankingFactor * offset 2440 */ - float postCrankingDurationSec = (float)0; + float postCrankingDurationSec; /** * todo: finish implementation #332 * offset 2444 @@ -4275,19 +2250,19 @@ struct engine_configuration_s { /** * offset 2508 */ - int16_t fuelClosedLoopCltThreshold = (int16_t)0; + int16_t fuelClosedLoopCltThreshold; /** * offset 2510 */ - int16_t fuelClosedLoopTpsThreshold = (int16_t)0; + int16_t fuelClosedLoopTpsThreshold; /** * offset 2512 */ - int16_t fuelClosedLoopRpmThreshold = (int16_t)0; + int16_t fuelClosedLoopRpmThreshold; /** * offset 2514 */ - int16_t etbFreq = (int16_t)0; + int16_t etbFreq; /** * offset 2516 */ @@ -4295,7 +2270,7 @@ struct engine_configuration_s { /** * offset 2536 */ - float fuelClosedLoopAfrHighThreshold = (float)0; + float fuelClosedLoopAfrHighThreshold; /** * per-cylinder timing correction * offset 2540 @@ -4304,7 +2279,7 @@ struct engine_configuration_s { /** * offset 2588 */ - float idlePidActivationTime = (float)0; + float idlePidActivationTime; /** * offset 2592 */ @@ -4432,7 +2407,7 @@ struct engine_configuration_s { /** * offset 3100 */ - uint8_t unusedFlexFuelSensor = (uint8_t)0; + uint8_t unusedFlexFuelSensor; /** * offset 3101 */ @@ -4480,32 +2455,32 @@ struct engine_configuration_s { * This sets the RPM limit above which the fuel cut is deactivated, activating this maintains fuel flow at high RPM to help cool pistons * offset 3148 */ - int16_t coastingFuelCutRpmHigh = (int16_t)0; + int16_t coastingFuelCutRpmHigh; /** * This sets the RPM limit below which the fuel cut is deactivated, this prevents jerking or issues transitioning to idle * offset 3150 */ - int16_t coastingFuelCutRpmLow = (int16_t)0; + int16_t coastingFuelCutRpmLow; /** * percent between 0 and 100 below which the fuel cut is deactivated, this helps low speed drivability. * offset 3152 */ - int16_t coastingFuelCutTps = (int16_t)0; + int16_t coastingFuelCutTps; /** * Fuel cutoff is deactivated below this coolant threshold. * offset 3154 */ - int16_t coastingFuelCutClt = (int16_t)0; + int16_t coastingFuelCutClt; /** * Increases PID reaction for RPMetb1.controlPin1 = GPIOC_7; + engineConfiguration->etbIo[0].controlPin1 = GPIOC_7; // DIR pin - boardConfiguration->etb1.directionPin1 = GPIOA_8; + engineConfiguration->etbIo[0].directionPin1 = GPIOA_8; // set_fsio_output_pin 7 PC8 #if EFI_FSIO @@ -113,10 +113,10 @@ static void setupEtb() { // engineConfiguration->throttlePedalPositionAdcChannel = EFI_ADC_7; // Unused - boardConfiguration->etb1.directionPin2 = GPIO_UNASSIGNED; + engineConfiguration->etbIo[0].directionPin2 = GPIO_UNASSIGNED; // we only have pwm/dir, no dira/dirb - engineConfiguration->etb1_use_two_wires = false; + engineConfiguration->etb_use_two_wires = false; engineConfiguration->etbFreq = 800; } diff --git a/firmware/config/boards/nucleo_f746/!compile-stm32f746_nucleo.bat b/firmware/config/boards/nucleo_f746/!compile-stm32f746_nucleo.bat index 446d586c97..cdc807cf5b 100644 --- a/firmware/config/boards/nucleo_f746/!compile-stm32f746_nucleo.bat +++ b/firmware/config/boards/nucleo_f746/!compile-stm32f746_nucleo.bat @@ -19,4 +19,3 @@ set EXTRA_PARAMS=-DDUMMY -DSTM32F746xx ^ set DEBUG_LEVEL_OPT="-O2" call config/boards/common_make.bat -call config/boards/clean_env_variables.bat \ No newline at end of file diff --git a/firmware/config/boards/nucleo_f767/!compile-stm32f767_nucleo.bat b/firmware/config/boards/nucleo_f767/!compile-stm32f767_nucleo.bat index 1397faaecc..df9b87c88f 100644 --- a/firmware/config/boards/nucleo_f767/!compile-stm32f767_nucleo.bat +++ b/firmware/config/boards/nucleo_f767/!compile-stm32f767_nucleo.bat @@ -14,9 +14,8 @@ set EXTRA_PARAMS=-DDUMMY -DSTM32F767xx ^ -DEFI_COMMUNICATION_PIN=GPIOB_7 ^ -DEFI_FATAL_ERROR_PIN=GPIOB_14 ^ -DEFI_ENABLE_ASSERTS=FALSE ^ - -DCH_DBG_ENABLE_CHECKS=FALSE -DCH_DBG_ENABLE_TRACE=FALSE -DCH_DBG_ENABLE_ASSERTS=FALSE -DCH_DBG_ENABLE_STACK_CHECK=FALSE -DCH_DBG_FILL_THREADS=FALSE -DCH_DBG_THREADS_PROFILING=FALSE + -DCH_DBG_ENABLE_CHECKS=FALSE -DCH_DBG_ENABLE_ASSERTS=FALSE -DCH_DBG_ENABLE_STACK_CHECK=FALSE -DCH_DBG_FILL_THREADS=FALSE -DCH_DBG_THREADS_PROFILING=FALSE set DEBUG_LEVEL_OPT="-O2" call config/boards/common_make.bat -call config/boards/clean_env_variables.bat diff --git a/firmware/config/boards/nucleo_f767/!compile-stm32f767_osc.bat b/firmware/config/boards/nucleo_f767/!compile-stm32f767_osc.bat index 7ced41d213..cbf1f791ce 100644 --- a/firmware/config/boards/nucleo_f767/!compile-stm32f767_osc.bat +++ b/firmware/config/boards/nucleo_f767/!compile-stm32f767_osc.bat @@ -12,11 +12,10 @@ set EXTRA_PARAMS=-DDUMMY -DSTM32F767xx ^ -DEFI_FATAL_ERROR_PIN=GPIOB_14 ^ -DEFI_ENABLE_ASSERTS=FALSE ^ -DEFI_USE_OSC=TRUE ^ - -DCH_DBG_ENABLE_CHECKS=FALSE -DCH_DBG_ENABLE_TRACE=FALSE -DCH_DBG_ENABLE_ASSERTS=FALSE -DCH_DBG_ENABLE_STACK_CHECK=FALSE -DCH_DBG_FILL_THREADS=FALSE -DCH_DBG_THREADS_PROFILING=FALSE + -DCH_DBG_ENABLE_CHECKS=FALSE -DCH_DBG_ENABLE_ASSERTS=FALSE -DCH_DBG_ENABLE_STACK_CHECK=FALSE -DCH_DBG_FILL_THREADS=FALSE -DCH_DBG_THREADS_PROFILING=FALSE rem Do not forget to comment out following line if looking to debug! set DEBUG_LEVEL_OPT="-O2" call config/boards/common_make.bat -call config/boards/clean_env_variables.bat diff --git a/firmware/config/boards/nucleo_f767/board_configuration.cpp b/firmware/config/boards/nucleo_f767/board_configuration.cpp index 014e9ef372..c4bbf9ae07 100644 --- a/firmware/config/boards/nucleo_f767/board_configuration.cpp +++ b/firmware/config/boards/nucleo_f767/board_configuration.cpp @@ -69,7 +69,7 @@ void setBoardConfigurationOverrides(void) { boardConfiguration->triggerSimulatorPins[2] = GPIO_UNASSIGNED; boardConfiguration->triggerSimulatorPinModes[1] = OM_DEFAULT; boardConfiguration->triggerSimulatorPinModes[2] = OM_DEFAULT; - boardConfiguration->vehicleSpeedSensorInputPin = GPIO_UNASSIGNED; + engineConfiguration->vehicleSpeedSensorInputPin = GPIO_UNASSIGNED; boardConfiguration->digitalPotentiometerSpiDevice = SPI_NONE; boardConfiguration->max31855spiDevice = SPI_NONE; diff --git a/firmware/config/boards/prometheus/!compile-prometheus_405.bat b/firmware/config/boards/prometheus/!compile-prometheus_405.bat index a2bb40c09a..1502021057 100644 --- a/firmware/config/boards/prometheus/!compile-prometheus_405.bat +++ b/firmware/config/boards/prometheus/!compile-prometheus_405.bat @@ -3,14 +3,7 @@ rem STM32F405 version of the firmware for https://rusefi.com/forum/viewtopic.php rem cd ../../.. -set PROJECT_BOARD=prometheus -set PROMETHEUS_BOARD=405 -set EXTRA_PARAMS=-DDUMMY -DSTM32F405xx -DEFI_ENABLE_ASSERTS=FALSE ^ - -DFIRMWARE_ID=\"prometheus405\" ^ - -DCH_DBG_ENABLE_TRACE=FALSE -DCH_DBG_ENABLE_ASSERTS=FALSE -DCH_DBG_ENABLE_STACK_CHECK=FALSE -DCH_DBG_FILL_THREADS=FALSE -DCH_DBG_THREADS_PROFILING=FALSE -set DEBUG_LEVEL_OPT="-O2" -set USE_BOOTLOADER=yes +set PROJECT_BOARD=prometheus/f405 call config/boards/common_make.bat -call config/boards/clean_env_variables.bat \ No newline at end of file diff --git a/firmware/config/boards/prometheus/!compile-prometheus_469.bat b/firmware/config/boards/prometheus/!compile-prometheus_469.bat index 6dd85fac4d..040f7f8daf 100644 --- a/firmware/config/boards/prometheus/!compile-prometheus_469.bat +++ b/firmware/config/boards/prometheus/!compile-prometheus_469.bat @@ -3,14 +3,8 @@ rem STM32F469 version of the firmware for https://rusefi.com/forum/viewtopic.php rem cd ../../.. -set PROJECT_BOARD=prometheus -set PROMETHEUS_BOARD=469 -set EXTRA_PARAMS=-DDUMMY -DSTM32F469xx -DEFI_ENABLE_ASSERTS=FALSE ^ - -DFIRMWARE_ID=\"prometeus469\" ^ - -DCH_DBG_ENABLE_TRACE=FALSE -DCH_DBG_ENABLE_ASSERTS=FALSE -DCH_DBG_ENABLE_STACK_CHECK=FALSE -DCH_DBG_FILL_THREADS=FALSE -DCH_DBG_THREADS_PROFILING=FALSE -set DEBUG_LEVEL_OPT="-O2" +set PROJECT_BOARD=prometheus/f469 set USE_BOOTLOADER=yes call config/boards/common_make.bat -call config/boards/clean_env_variables.bat diff --git a/firmware/config/boards/prometheus/board_configuration.cpp b/firmware/config/boards/prometheus/board_configuration.cpp index 662a3c6ba7..2faf3efe50 100644 --- a/firmware/config/boards/prometheus/board_configuration.cpp +++ b/firmware/config/boards/prometheus/board_configuration.cpp @@ -191,7 +191,7 @@ void setBoardConfigurationOverrides(void) { boardConfiguration->malfunctionIndicatorPinMode = OM_DEFAULT; // starter block - setFsio(0, (is469 ? GPIOB_10 : GPIOB_1), STARTER_BLOCK PASS_CONFIG_PARAMETER_SUFFIX); + setFsio(0, (is469 ? GPIOB_10 : GPIOB_1), STARTER_RELAY_LOGIC PASS_CONFIG_PARAMETER_SUFFIX); // debug pad @@ -215,7 +215,7 @@ void setBoardConfigurationOverrides(void) { boardConfiguration->triggerSimulatorPins[2] = GPIO_UNASSIGNED; boardConfiguration->triggerSimulatorPinModes[1] = OM_DEFAULT; boardConfiguration->triggerSimulatorPinModes[2] = OM_DEFAULT; - boardConfiguration->vehicleSpeedSensorInputPin = GPIO_UNASSIGNED; + engineConfiguration->vehicleSpeedSensorInputPin = GPIO_UNASSIGNED; boardConfiguration->digitalPotentiometerSpiDevice = SPI_NONE; boardConfiguration->max31855spiDevice = SPI_NONE; diff --git a/firmware/config/boards/prometheus/efifeatures.h b/firmware/config/boards/prometheus/efifeatures.h index 3d39906559..ecf7eba807 100644 --- a/firmware/config/boards/prometheus/efifeatures.h +++ b/firmware/config/boards/prometheus/efifeatures.h @@ -105,8 +105,8 @@ #undef EFI_MEMS #define EFI_MEMS FALSE -#undef EFI_IDLE_INCREMENTAL_PID_CIC -#define EFI_IDLE_INCREMENTAL_PID_CIC TRUE +#undef EFI_IDLE_PID_CIC +#define EFI_IDLE_PID_CIC TRUE #define RPM_LOW_THRESHOLD 8 // RPM=8 is an empirical lower sensitivity threshold of MAX9926 for 60-2 #define NO_RPM_EVENTS_TIMEOUT_SECS 5 // (RPM < 12) diff --git a/firmware/config/boards/prometheus/f405/board.mk b/firmware/config/boards/prometheus/f405/board.mk new file mode 100644 index 0000000000..8a4c92e35d --- /dev/null +++ b/firmware/config/boards/prometheus/f405/board.mk @@ -0,0 +1,3 @@ +PROMETHEUS_BOARD = 405 + +include $(PROJECT_DIR)/config/boards/prometheus/prometheus-common.mk \ No newline at end of file diff --git a/firmware/config/boards/prometheus/f469/board.mk b/firmware/config/boards/prometheus/f469/board.mk new file mode 100644 index 0000000000..6c2fe59e51 --- /dev/null +++ b/firmware/config/boards/prometheus/f469/board.mk @@ -0,0 +1,3 @@ +PROMETHEUS_BOARD = 469 + +include $(PROJECT_DIR)/config/boards/prometheus/prometheus-common.mk diff --git a/firmware/config/boards/prometheus/board.mk b/firmware/config/boards/prometheus/prometheus-common.mk similarity index 55% rename from firmware/config/boards/prometheus/board.mk rename to firmware/config/boards/prometheus/prometheus-common.mk index 8e59572dff..c53f0c82b5 100644 --- a/firmware/config/boards/prometheus/board.mk +++ b/firmware/config/boards/prometheus/prometheus-common.mk @@ -7,17 +7,25 @@ BOARDSRC_CPP = $(PROJECT_DIR)/config/boards/Prometheus/board_configuration.cpp # Required include directories BOARDINC = $(PROJECT_DIR)/config/boards/prometheus -# Override LD script -ifeq ($(USE_BOOTLOADER),yes) - # include Prometheus bootloader code - BOOTLOADERINC= $(PROJECT_DIR)/bootloader/prometheus/$(PROMETHEUS_BOARD) +# This board uses bootloader +USE_BOOTLOADER=yes + +# include Prometheus bootloader code +BOOTLOADERINC= $(PROJECT_DIR)/bootloader/prometheus/$(PROMETHEUS_BOARD) + +# Default to a release build - clear EXTRA_PARAMS from cmdline to build debug +ifeq ($(EXTRA_PARAMS),) + EXTRA_PARAMS=-DEFI_ENABLE_ASSERTS=FALSE -DCH_DBG_ENABLE_ASSERTS=FALSE -DCH_DBG_ENABLE_STACK_CHECK=FALSE -DCH_DBG_FILL_THREADS=FALSE -DCH_DBG_THREADS_PROFILING=FALSE +endif +ifeq ($(DEBUG_LEVEL_OPT),) + DEBUG_LEVEL_OPT = -O2 endif ifeq ($(PROMETHEUS_BOARD),405) LDSCRIPT= $(PROJECT_DIR)/config/boards/prometheus/STM32F405xG.ld -DDEFS += -DDEFAULT_ENGINE_TYPE=PROMETHEUS_DEFAULTS -DSTM32F405xx +DDEFS += -DDEFAULT_ENGINE_TYPE=PROMETHEUS_DEFAULTS -DSTM32F405xx -DFIRMWARE_ID=\"prometeus405\" else # Override DEFAULT_ENGINE_TYPE LDSCRIPT= $(PROJECT_DIR)/config/boards/prometheus/STM32F469xI.ld -DDEFS += -DDEFAULT_ENGINE_TYPE=PROMETHEUS_DEFAULTS -DSTM32F469xx +DDEFS += -DDEFAULT_ENGINE_TYPE=PROMETHEUS_DEFAULTS -DSTM32F469xx -DFIRMWARE_ID=\"prometeus469\" endif diff --git a/firmware/config/boards/proteus/board.mk b/firmware/config/boards/proteus/board.mk new file mode 100644 index 0000000000..eb50754451 --- /dev/null +++ b/firmware/config/boards/proteus/board.mk @@ -0,0 +1,11 @@ +# List of all the board related files. +BOARDSRC = $(CHIBIOS)/os/hal/boards/ST_NUCLEO144_F767ZI/board.c +BOARDSRC_CPP = $(PROJECT_DIR)/config/boards/proteus/board_configuration.cpp + +# Required include directories +BOARDINC = $(PROJECT_DIR)/config/boards/nucleo_f767 $(PROJECT_DIR)/config/stm32f7ems + +LDSCRIPT= $(PROJECT_DIR)/config/boards/nucleo_f767/STM32F76xxI.ld + +# Override DEFAULT_ENGINE_TYPE +DDEFS += -DSTM32F767xx -DEFI_USE_OSC=TRUE -DEFI_FATAL_ERROR_PIN=GPIOE_3 -DFIRMWARE_ID=\"proteus\" -DDEFAULT_ENGINE_TYPE=PROTEUS diff --git a/firmware/config/boards/proteus/board_configuration.cpp b/firmware/config/boards/proteus/board_configuration.cpp new file mode 100644 index 0000000000..0554f34496 --- /dev/null +++ b/firmware/config/boards/proteus/board_configuration.cpp @@ -0,0 +1,166 @@ +/** + * @file boards/proteus/board_configuration.cpp + * + * @brief Configuration defaults for the Proteus board + * + * @author Matthew Kennedy, (c) 2019 + */ + +#include "global.h" +#include "engine.h" +#include "engine_math.h" +#include "allsensors.h" +#include "fsio_impl.h" +#include "engine_configuration.h" + +EXTERN_ENGINE; + +static void setInjectorPins() { + boardConfiguration->injectionPins[0] = GPIOD_7; + boardConfiguration->injectionPins[1] = GPIOG_9; + boardConfiguration->injectionPins[2] = GPIOG_10; + boardConfiguration->injectionPins[3] = GPIOG_11; + boardConfiguration->injectionPins[4] = GPIOG_12; + boardConfiguration->injectionPins[5] = GPIOG_13; + boardConfiguration->injectionPins[6] = GPIOG_14; + boardConfiguration->injectionPins[7] = GPIOB_4; + boardConfiguration->injectionPins[8] = GPIOB_5; + boardConfiguration->injectionPins[9] = GPIOB_6; + boardConfiguration->injectionPins[10] = GPIOB_7; + boardConfiguration->injectionPins[11] = GPIOB_8; + + boardConfiguration->injectionPinMode = OM_DEFAULT; +} + +static void setIgnitionPins() { + boardConfiguration->ignitionPins[0] = GPIOD_4; + boardConfiguration->ignitionPins[1] = GPIOD_3; + boardConfiguration->ignitionPins[2] = GPIOC_9; + boardConfiguration->ignitionPins[3] = GPIOC_8; + boardConfiguration->ignitionPins[4] = GPIOC_7; + boardConfiguration->ignitionPins[5] = GPIOG_8; + boardConfiguration->ignitionPins[6] = GPIOG_7; + boardConfiguration->ignitionPins[7] = GPIOG_6; + boardConfiguration->ignitionPins[8] = GPIOG_5; + boardConfiguration->ignitionPins[9] = GPIOG_4; + boardConfiguration->ignitionPins[10] = GPIOG_3; + boardConfiguration->ignitionPins[11] = GPIOG_2; + + boardConfiguration->ignitionPinMode = OM_DEFAULT; +} + +static void setLedPins() { + engineConfiguration->communicationLedPin = GPIOE_4; + engineConfiguration->runningLedPin = GPIOE_5; + boardConfiguration->triggerErrorPin = GPIOE_6; +} + +static void setupVbatt() { + // 6.8k high side/10k low side = 1.6667 ratio divider + engineConfiguration->analogInputDividerCoefficient = 2.5f / 1.5f; + + // 47k high side/10k low side = 4.7 + engineConfiguration->vbattDividerCoeff = (57.0f / 10.0f); + //engineConfiguration->vbattAdcChannel = TODO; + + engineConfiguration->adcVcc = 3.3f; +} + +static void setupEtb() { + // TLE9201 driver + // This chip has three control pins: + // DIR - sets direction of the motor + // PWM - pwm control (enable high, coast low) + // DIS - disables motor (enable low) + + // Throttle #1 + // PWM pin + engineConfiguration->etbIo[0].controlPin1 = GPIOD_12; + // DIR pin + engineConfiguration->etbIo[0].directionPin1 = GPIOD_10; + // Unused + engineConfiguration->etbIo[0].directionPin2 = GPIO_UNASSIGNED; + + // Throttle #2 + // PWM pin + engineConfiguration->etbIo[0].controlPin1 = GPIOD_13; + // DIR pin + engineConfiguration->etbIo[0].directionPin1 = GPIOD_9; + // Unused + engineConfiguration->etbIo[0].directionPin2 = GPIO_UNASSIGNED; + +#if EFI_FSIO + // disable ETB by default + setFsio(7, GPIOD_8, "1" PASS_CONFIG_PARAMETER_SUFFIX); + setFsio(8, GPIOD_11, "1" PASS_CONFIG_PARAMETER_SUFFIX); +#endif /* EFI_FSIO */ + + // we only have pwm/dir, no dira/dirb + engineConfiguration->etb_use_two_wires = false; + engineConfiguration->etbFreq = 800; +} + +static void setupDefaultSensorInputs() { + // trigger inputs + // VR channel 1 as default - others not set + boardConfiguration->triggerInputPins[0] = GPIOC_6; + boardConfiguration->triggerInputPins[1] = GPIO_UNASSIGNED; + boardConfiguration->triggerInputPins[2] = GPIO_UNASSIGNED; + engineConfiguration->camInputs[0] = GPIO_UNASSIGNED; + + // clt = Analog Temp 1 = PC4 + engineConfiguration->clt.adcChannel = EFI_ADC_14; + engineConfiguration->clt.config.bias_resistor = 2700; + + // iat = Analog Temp 2 = PC5 + engineConfiguration->iat.adcChannel = EFI_ADC_15; + engineConfiguration->iat.config.bias_resistor = 2700; + + // TODO: more sensors +} + +void setPinConfigurationOverrides(void) { +} + +void setSerialConfigurationOverrides(void) { + boardConfiguration->useSerialPort = false; + engineConfiguration->binarySerialTxPin = GPIO_UNASSIGNED; + engineConfiguration->binarySerialRxPin = GPIO_UNASSIGNED; + engineConfiguration->consoleSerialTxPin = GPIO_UNASSIGNED; + engineConfiguration->consoleSerialRxPin = GPIO_UNASSIGNED; +} + + +/** + * @brief Board-specific configuration code overrides. + * + * See also setDefaultEngineConfiguration + * + * @todo Add your board-specific code, if any. + */ +void setBoardConfigurationOverrides(void) { + setInjectorPins(); + setIgnitionPins(); + setLedPins(); + setupVbatt(); + setupEtb(); + + // "required" hardware is done - set some reasonable defaults + setupDefaultSensorInputs(); + + // Some sensible defaults for other options + setOperationMode(engineConfiguration, FOUR_STROKE_CRANK_SENSOR); + engineConfiguration->trigger.type = TT_TOOTHED_WHEEL_60_2; + engineConfiguration->useOnlyRisingEdgeForTrigger = true; + setAlgorithm(LM_SPEED_DENSITY PASS_CONFIG_PARAMETER_SUFFIX); + + engineConfiguration->specs.cylindersCount = 8; + engineConfiguration->specs.firingOrder = FO_1_8_7_2_6_5_4_3; + + engineConfiguration->ignitionMode = IM_INDIVIDUAL_COILS; + engineConfiguration->crankingInjectionMode = IM_SIMULTANEOUS; + engineConfiguration->injectionMode = IM_SIMULTANEOUS; +} + +void setAdcChannelOverrides(void) { +} diff --git a/firmware/config/boards/proteus/mapping.yaml b/firmware/config/boards/proteus/mapping.yaml new file mode 100644 index 0000000000..2f3b8711ec --- /dev/null +++ b/firmware/config/boards/proteus/mapping.yaml @@ -0,0 +1,73 @@ +outputs: + GPIOD_7: "Lowside 1" + GPIOG_9: "Lowside 2" + GPIOG_10: "Lowside 3" + GPIOG_11: "Lowside 4" + GPIOG_12: "Lowside 5" + GPIOG_13: "Lowside 6" + GPIOG_14: "Lowside 7" + GPIOB_4: "Lowside 8" + GPIOB_5: "Lowside 9" + GPIOB_6: "Lowside 10" + GPIOB_7: "Lowside 11" + GPIOB_8: "Lowside 12" + GPIOB_9: "Lowside 13" + GPIOE_0: "Lowside 14" + GPIOE_1: "Lowside 15" + GPIOE_2: "Lowside 16" + + GPIOD_4: "Ign 1" + GPIOD_3: "Ign 2" + GPIOC_9: "Ign 3" + GPIOC_8: "Ign 4" + GPIOC_7: "Ign 5" + GPIOG_8: "Ign 6" + GPIOG_7: "Ign 7" + GPIOG_6: "Ign 8" + GPIOG_5: "Ign 9" + GPIOG_4: "Ign 10" + GPIOG_3: "Ign 11" + GPIOG_2: "Ign 12" + + GPIOA_9: "Highside 1" + GPIOA_8: "Highside 2" + GPIOD_15: "Highside 3" + GPIOD_14: "Highside 4" + +event_inputs: + GPIOC_6: "Digital 1" + GPIOE_11: "Digital 2" + GPIOE_12: "Digital 3" + GPIOE_13: "Digital 4" + GPIOE_14: "Digital 5" + GPIOE_15: "Digital 6" + GPIOE_7: "Digital 7" + GPIOE_8: "Digital 8" + +switch_inputs: + GPIOC_6: "Digital 1" + GPIOE_11: "Digital 2" + GPIOE_12: "Digital 3" + GPIOE_13: "Digital 4" + GPIOE_14: "Digital 5" + GPIOE_15: "Digital 6" + GPIOE_7: "Digital 7" + GPIOE_8: "Digital 8" + +analog_inputs: + EFI_ADC_0: "Analog Volt 5" + EFI_ADC_1: "Analog Volt 6" + EFI_ADC_2: "Analog Volt 7" + EFI_ADC_3: "Analog Volt 8" + EFI_ADC_4: "Analog Volt 9" + EFI_ADC_5: "Analog Volt 10" + EFI_ADC_6: "Analog Volt 11" + EFI_ADC_7: "Analog Volt 12" + EFI_ADC_8: "Analog Temp 3" + EFI_ADC_9: "Analog Temp 4" + EFI_ADC_10: "Analog Volt 1" + EFI_ADC_11: "Analog Volt 2" + EFI_ADC_12: "Analog Volt 3" + EFI_ADC_13: "Analog Volt 4" + EFI_ADC_14: "Analog Temp 1" + EFI_ADC_15: "Analog Temp 2" diff --git a/firmware/config/boards/skeleton/board_configuration.cpp b/firmware/config/boards/skeleton/board_configuration.cpp index 2a5beccd94..0ca92b6f12 100644 --- a/firmware/config/boards/skeleton/board_configuration.cpp +++ b/firmware/config/boards/skeleton/board_configuration.cpp @@ -64,11 +64,11 @@ static void setupTle8888() { // diagnostic interface on SPI static void setupTle9201Etb() { // This chip has PWM/DIR, not dira/dirb - engineConfiguration->etb1_use_two_wires = false; + engineConfiguration->etb_use_two_wires = false; // PWM and DIR pins - boardConfiguration->etb1.controlPin1 = GPIOC_7; - boardConfiguration->etb1.directionPin1 = GPIOA_8; - boardConfiguration->etb1.directionPin2 = GPIO_UNASSIGNED; + engineConfiguration->etbIo[0].controlPin1 = GPIOC_7; + engineConfiguration->etbIo[0].directionPin1 = GPIOA_8; + engineConfiguration->etbIo[0].directionPin2 = GPIO_UNASSIGNED; // PWM frequency needs to be configured to match the physical part engineConfiguration->etbFreq = 800; } diff --git a/firmware/config/boards/skeleton/efifeatures.h b/firmware/config/boards/skeleton/efifeatures.h index a401d05fad..d48d411b16 100644 --- a/firmware/config/boards/skeleton/efifeatures.h +++ b/firmware/config/boards/skeleton/efifeatures.h @@ -33,7 +33,7 @@ // Build the logic analyzer support. // A logic analyzer viewer is included in the java console. -#define EFI_WAVE_ANALYZER TRUE +#define EFI_LOGIC_ANALYZER TRUE // A development feature to test output jitter and consistency #define EFI_PWM_TESTER FALSE @@ -175,7 +175,7 @@ #define EFI_IDLE_CONTROL TRUE #endif -#define EFI_IDLE_INCREMENTAL_PID_CIC FALSE +#define EFI_IDLE_PID_CIC FALSE /** * Control the main power relay based on measured ignition voltage (Vbatt) diff --git a/firmware/config/boards/subaru-ej20gn/board_configuration.cpp b/firmware/config/boards/subaru-ej20gn/board_configuration.cpp index 6b107ee431..03a9dcf8f0 100644 --- a/firmware/config/boards/subaru-ej20gn/board_configuration.cpp +++ b/firmware/config/boards/subaru-ej20gn/board_configuration.cpp @@ -160,7 +160,7 @@ void setBoardConfigurationOverrides(void) { // starter block /* Starter signal connected through MC33972 - SG11 */ - //setFsio(0, (GPIOB_1), STARTER_BLOCK PASS_CONFIG_PARAMETER_SUFFIX); + //setFsio(0, (GPIOB_1), STARTER_RELAY_LOGIC PASS_CONFIG_PARAMETER_SUFFIX); // not used @@ -177,7 +177,7 @@ void setBoardConfigurationOverrides(void) { boardConfiguration->digitalPotentiometerChipSelect[1] = GPIO_UNASSIGNED; boardConfiguration->digitalPotentiometerChipSelect[2] = GPIO_UNASSIGNED; boardConfiguration->digitalPotentiometerChipSelect[3] = GPIO_UNASSIGNED; - boardConfiguration->vehicleSpeedSensorInputPin = GPIO_UNASSIGNED; + engineConfiguration->vehicleSpeedSensorInputPin = GPIO_UNASSIGNED; boardConfiguration->digitalPotentiometerSpiDevice = SPI_NONE; boardConfiguration->max31855spiDevice = SPI_NONE; diff --git a/firmware/config/boards/subaru-ej20gn/efifeatures.h b/firmware/config/boards/subaru-ej20gn/efifeatures.h index d92dd2db2e..93e09ab7cc 100644 --- a/firmware/config/boards/subaru-ej20gn/efifeatures.h +++ b/firmware/config/boards/subaru-ej20gn/efifeatures.h @@ -103,8 +103,8 @@ #undef EFI_MEMS #define EFI_MEMS FALSE -#undef EFI_IDLE_INCREMENTAL_PID_CIC -#define EFI_IDLE_INCREMENTAL_PID_CIC TRUE +#undef EFI_IDLE_PID_CIC +#define EFI_IDLE_PID_CIC TRUE #define RPM_LOW_THRESHOLD 8 // RPM=8 is an empirical lower sensitivity threshold of MAX9926 for 60-2 #define NO_RPM_EVENTS_TIMEOUT_SECS 5 // (RPM < 12) diff --git a/firmware/config/boards/subaru-ej20gn/make.sh b/firmware/config/boards/subaru-ej20gn/make.sh index add57a5ab5..19152e6e61 100755 --- a/firmware/config/boards/subaru-ej20gn/make.sh +++ b/firmware/config/boards/subaru-ej20gn/make.sh @@ -3,7 +3,7 @@ export PROJECT_BOARD=subaru-ej20gn export PROJECT_CPU=ARCH_STM32F7 export PROJECT_CORE=cortex-m7 -export EXTRA_PARAMS="-DDUMMY -DEFI_ENABLE_ASSERTS=FALSE -DCH_DBG_ENABLE_TRACE=FALSE -DCH_DBG_ENABLE_ASSERTS=FALSE -DCH_DBG_ENABLE_STACK_CHECK=FALSE -DCH_DBG_FILL_THREADS=FALSE -DCH_DBG_THREADS_PROFILING=FALSE" +export EXTRA_PARAMS="-DDUMMY -DEFI_ENABLE_ASSERTS=FALSE -DCH_DBG_ENABLE_ASSERTS=FALSE -DCH_DBG_ENABLE_STACK_CHECK=FALSE -DCH_DBG_FILL_THREADS=FALSE -DCH_DBG_THREADS_PROFILING=FALSE" #echo $EXTRA_PARAMS #export DEBUG_LEVEL_OPT="-O0" #export USE_BOOTLOADER=yes diff --git a/firmware/config/engines/bmw_e34.cpp b/firmware/config/engines/bmw_e34.cpp index 4fcd22b18f..72bcb1d5e3 100644 --- a/firmware/config/engines/bmw_e34.cpp +++ b/firmware/config/engines/bmw_e34.cpp @@ -119,8 +119,8 @@ void setBmwE34(DECLARE_CONFIG_PARAMETER_SIGNATURE) { boardConfiguration->triggerErrorPin = GPIO_UNASSIGNED; // clutch up - boardConfiguration->clutchUpPin = GPIOD_3; - boardConfiguration->clutchUpPinMode = PI_PULLUP; + engineConfiguration->clutchUpPin = GPIOD_3; + engineConfiguration->clutchUpPinMode = PI_PULLUP; // fuel pump boardConfiguration->fuelPumpPin = GPIOD_4; diff --git a/firmware/config/engines/bmw_m73.cpp b/firmware/config/engines/bmw_m73.cpp index 399bcb5238..96058e04da 100644 --- a/firmware/config/engines/bmw_m73.cpp +++ b/firmware/config/engines/bmw_m73.cpp @@ -24,17 +24,17 @@ * ECU pin 23: OUT BRN/BLK BLK ECU relay control, low-side * * Plug #3 52 pin - * ECU pin 2: OUT injector #4 + * ECU pin 2: OUT WHT injector #4 * ECU pin 6: GND ECU - * ECU pin 15: OUT injector #2 + * ECU pin 15: OUT BLK injector #2 * ECU pin 20: IN WHT hall effect camshaft sensor signal * ECU pin 21: GND BRN BLK CLT sensor * ECU pin 22: IN RED/BRN GRN CLT sensor - * ECU pin 27: OUT injector #6 - * ECU pin 28: OUT injector #5 + * ECU pin 27: OUT ORG injector #6 + * ECU pin 28: OUT RED injector #5 * ECU pin 32: IN ORG VR positive crankshaft sensor - only 2x 5k per channel, R111 not installed, W1002 not installed - * ECU pin 40: OUT BRN/BLK injector #3 - * ECU pin 41: OUT BRN/WHT injector #1 + * ECU pin 40: OUT BRN/BLK GRN injector #3 + * ECU pin 41: OUT BRN/WHT BLU injector #1 * ECU pin 45: GND crankshaft shield * ECU pin 46: IN BLK BLU VR negative crankshaft sensor * @@ -50,13 +50,15 @@ * ECU pic 3: OUT BLK coil signal, low-side * ECU pic 5: GND BRN ground * ECU pic 6: OUT BLK coil signal, low-side - * ECU pic 9: OUT BLK coil signal, low-side + * ECU pic 9: OUT BLK RED coil signal, low-side * * Frankenso * set engine_type 40 * Manhattan * set engine_type 24 * + * https://raw.githubusercontent.com/wiki/rusefi/rusefi_documentation/oem_docs/VAG/Bosch_0280750009_pinout.jpg + * * @date Nov 1, 2019 * @author Andrey Belomutskiy, (c) 2012-2019 */ @@ -78,9 +80,16 @@ static void m73engine(DECLARE_CONFIG_PARAMETER_SIGNATURE) { engineConfiguration->globalTriggerAngleOffset = 90; setOperationMode(engineConfiguration, FOUR_STROKE_CRANK_SENSOR); + // todo: that's not right, should be 60/2 without VW engineConfiguration->trigger.type = TT_60_2_VW; + // this large engine seems to crank at around only 150 RPM? And happily idle at 400RPM? + engineConfiguration->cranking.rpm = 280; + engineConfiguration->ignitionMode = IM_TWO_COILS; + + // set cranking_fuel 15 + engineConfiguration->cranking.baseFuel = 15; } @@ -99,31 +108,106 @@ void setEngineBMW_M73_Frankenso(DECLARE_CONFIG_PARAMETER_SIGNATURE) { CONFIGB(fuelPumpPin) = GPIO_UNASSIGNED; - boardConfiguration->ignitionPins[ID2INDEX(1)] = GPIOE_14; // Frankenso high side - pin 1G + boardConfiguration->ignitionPins[ID2INDEX(1)] = GPIOE_14; // Frankenso high side - pin 1G - GREEN wire boardConfiguration->ignitionPins[ID2INDEX(2)] = GPIO_UNASSIGNED; boardConfiguration->ignitionPins[ID2INDEX(3)] = GPIO_UNASSIGNED; boardConfiguration->ignitionPins[ID2INDEX(4)] = GPIO_UNASSIGNED; - boardConfiguration->ignitionPins[ID2INDEX(7)] = GPIOC_7; // Frankenso high side - pin 1H + boardConfiguration->ignitionPins[ID2INDEX(7)] = GPIOC_7; // Frankenso high side - pin 1H - ORANGE wire - boardConfiguration->injectionPins[0] = GPIOB_8; - boardConfiguration->injectionPins[1] = GPIOB_7; - boardConfiguration->injectionPins[2] = GPIOB_9; - boardConfiguration->injectionPins[3] = GPIOD_5; - boardConfiguration->injectionPins[4] = GPIOD_3; - boardConfiguration->injectionPins[5] = GPIOE_2; + boardConfiguration->injectionPins[0] = GPIOB_8; // BLU + boardConfiguration->injectionPins[1] = GPIOB_7; // BLK + boardConfiguration->injectionPins[2] = GPIOB_9; // GRN + boardConfiguration->injectionPins[3] = GPIOD_5; // WHT + boardConfiguration->injectionPins[4] = GPIOD_3; // RED + boardConfiguration->injectionPins[5] = GPIOE_2; // ORG - boardConfiguration->injectionPins[6] = GPIOE_3; - boardConfiguration->injectionPins[7] = GPIOE_4; - boardConfiguration->injectionPins[8] = GPIOE_5; - boardConfiguration->injectionPins[9] = GPIOE_6; - boardConfiguration->injectionPins[10] = GPIOC_13; - boardConfiguration->injectionPins[11] = GPIOD_7; + boardConfiguration->injectionPins[6] = GPIOE_3; // BLU + boardConfiguration->injectionPins[7] = GPIOE_4; // BLK + boardConfiguration->injectionPins[8] = GPIOE_5; // GRN + boardConfiguration->injectionPins[9] = GPIOE_6; // WHT + boardConfiguration->injectionPins[10] = GPIOC_13;//RED + boardConfiguration->injectionPins[11] = GPIOD_7;// ORG } // BMW_M73_M void setEngineBMW_M73_Manhattan(DECLARE_CONFIG_PARAMETER_SIGNATURE) { m73engine(PASS_CONFIG_PARAMETER_SIGNATURE); + /** +Nucleo boards - first step is to confirm that I can blink via each pin +going clockwise from top-right corner + +GPIOA_10 USD ID +GPIOA_11 USD DM +GPIOA_12 USD DP + +E_4: running + +Good GPIO: +GPIOC_9 ETB#1 +GPIOC_8 ETB#1 +GPIOB_8 ETB#2 +GPIOB_9 ETB#2 +GPIOC_5 +GPIOA_7 +GPIOA_6 + */ + + + CONFIGB(fsioOutputPins)[7] = GPIO_UNASSIGNED; + boardConfiguration->fuelPumpPin = GPIO_UNASSIGNED; + boardConfiguration->idle.solenoidPin = GPIO_UNASSIGNED; + boardConfiguration->fanPin = GPIO_UNASSIGNED; + + /** + * Yellow op-amp board + * + * AN5 tested pull-down 1M PA3 TPS1 orange wire + * AN6 tested pull-down 1M PA4 TPS2 + * AN7 tested pull-down 1M PA6 PPS + * AN8 tested no pull-down / no pull-up + */ + + + // For example TLE7209 - two control wires: + // PWM on both wires - one to open, another to close + // ETB motor NEG pin # - white wire - OUT 1 + + engineConfiguration->throttlePedalPositionAdcChannel = EFI_ADC_6; + // set_analog_input_pin tps PA3 + engineConfiguration->tps1_1AdcChannel = EFI_ADC_3; // PA3 + // set_analog_input_pin tps2 PA4 + engineConfiguration->tps2_1AdcChannel = EFI_ADC_4; // PA4 + + // PWM pin + engineConfiguration->etbIo[0].controlPin1 = GPIO_UNASSIGNED; + // DIR pin + engineConfiguration->etbIo[0].directionPin1 = GPIOC_9; + engineConfiguration->etbIo[0].directionPin2 = GPIOC_8; + CONFIG(etb_use_two_wires) = true; + + // PWM pin + engineConfiguration->etbIo[1].controlPin1 = GPIO_UNASSIGNED; + // DIR pin + engineConfiguration->etbIo[1].directionPin1 = GPIOB_8; + engineConfiguration->etbIo[1].directionPin2 = GPIOB_9; + + + boardConfiguration->injectionPins[0] = GPIO_UNASSIGNED; + boardConfiguration->injectionPins[1] = GPIO_UNASSIGNED; + boardConfiguration->injectionPins[2] = GPIO_UNASSIGNED; + boardConfiguration->injectionPins[3] = GPIO_UNASSIGNED; + boardConfiguration->injectionPins[4] = GPIO_UNASSIGNED; + boardConfiguration->injectionPins[5] = GPIO_UNASSIGNED; + + boardConfiguration->injectionPins[6] = GPIO_UNASSIGNED; + boardConfiguration->injectionPins[7] = GPIO_UNASSIGNED; + boardConfiguration->injectionPins[8] = GPIO_UNASSIGNED; + boardConfiguration->injectionPins[9] = GPIO_UNASSIGNED; + boardConfiguration->injectionPins[10] = GPIO_UNASSIGNED; + boardConfiguration->injectionPins[11] = GPIO_UNASSIGNED; + + } diff --git a/firmware/config/engines/citroenBerlingoTU3JP.cpp b/firmware/config/engines/citroenBerlingoTU3JP.cpp index eb403f8887..301d99210c 100644 --- a/firmware/config/engines/citroenBerlingoTU3JP.cpp +++ b/firmware/config/engines/citroenBerlingoTU3JP.cpp @@ -201,7 +201,7 @@ void setCitroenBerlingoTU3JPConfiguration(DECLARE_CONFIG_PARAMETER_SIGNATURE) { /** * Speed Sensor */ - boardConfiguration->vehicleSpeedSensorInputPin = GPIOA_8; + engineConfiguration->vehicleSpeedSensorInputPin = GPIOA_8; /** * Other */ diff --git a/firmware/config/engines/custom_engine.cpp b/firmware/config/engines/custom_engine.cpp index 4715f5d276..8686d24dc9 100644 --- a/firmware/config/engines/custom_engine.cpp +++ b/firmware/config/engines/custom_engine.cpp @@ -253,6 +253,13 @@ void setEtbTestConfiguration(DECLARE_CONFIG_PARAMETER_SIGNATURE) { // set tps_max 540 engineConfiguration->tpsMax = 540; + // yes, 30K - that's a test configuration + engineConfiguration->rpmHardLimit = 30000; + + setOperationMode(engineConfiguration, FOUR_STROKE_CRANK_SENSOR); + engineConfiguration->trigger.type = TT_TOOTHED_WHEEL_60_2; + + boardConfiguration->ignitionPins[0] = GPIO_UNASSIGNED; boardConfiguration->ignitionPins[1] = GPIO_UNASSIGNED; boardConfiguration->ignitionPins[2] = GPIO_UNASSIGNED; @@ -260,9 +267,9 @@ void setEtbTestConfiguration(DECLARE_CONFIG_PARAMETER_SIGNATURE) { /** * remember that some H-bridges require 5v control lines, not just 3v logic outputs we have on stm32 */ - CONFIGB(etb1.directionPin1) = GPIOC_7; // Frankenso high-side in order to get 5v control - CONFIGB(etb1.directionPin2) = GPIOC_9; - CONFIGB(etb1.controlPin1) = GPIOE_14; + CONFIG(etbIo[0].directionPin1) = GPIOC_7; // Frankenso high-side in order to get 5v control + CONFIG(etbIo[0].directionPin2) = GPIOC_9; + CONFIG(etbIo[0].controlPin1) = GPIOE_14; #if EFI_ELECTRONIC_THROTTLE_BODY setBoschVNH2SP30Curve(PASS_CONFIG_PARAMETER_SIGNATURE); @@ -342,10 +349,10 @@ void setTle8888TestConfiguration(DECLARE_CONFIG_PARAMETER_SIGNATURE) { setFsio(12, GPIOF_12, "0" PASS_CONFIG_PARAMETER_SUFFIX); setFsio(14, GPIOF_13, "1" PASS_CONFIG_PARAMETER_SUFFIX); #endif /* EFI_FSIO */ - CONFIGB(etb1.directionPin1) = GPIOF_15; - CONFIGB(etb1.directionPin2) = GPIOF_14; + CONFIG(etbIo[0].directionPin1) = GPIOF_15; + CONFIG(etbIo[0].directionPin2) = GPIOF_14; #endif /* STM32_HAS_GPIOF */ - CONFIG(etb1_use_two_wires) = true; + CONFIG(etb_use_two_wires) = true; boardConfiguration->isHip9011Enabled = false; // ETB #2 @@ -358,9 +365,8 @@ void setTle8888TestConfiguration(DECLARE_CONFIG_PARAMETER_SIGNATURE) { setFsio(13, GPIOE_5, "0" PASS_CONFIG_PARAMETER_SUFFIX); setFsio(15, GPIOE_6, "1" PASS_CONFIG_PARAMETER_SUFFIX); #endif - CONFIG(etb2_use_two_wires) = true; - CONFIG(etb2.directionPin1) = GPIOE_2; - CONFIG(etb2.directionPin2) = GPIOE_4; + CONFIG(etbIo[0].directionPin1) = GPIOE_2; + CONFIG(etbIo[0].directionPin2) = GPIOE_4; engineConfiguration->tps1_1AdcChannel = EFI_ADC_3; // PA3 diff --git a/firmware/config/engines/dodge_neon.cpp b/firmware/config/engines/dodge_neon.cpp index 6615b9c8d5..c07d5b80f7 100644 --- a/firmware/config/engines/dodge_neon.cpp +++ b/firmware/config/engines/dodge_neon.cpp @@ -310,7 +310,7 @@ void setDodgeNeonNGCEngineConfiguration(DECLARE_CONFIG_PARAMETER_SIGNATURE) { //engineConfiguration->fuelAlgorithm = LM_ALPHA_N; // I want to start with a simple Alpha-N setFuelLoadBin(0, 100 PASS_CONFIG_PARAMETER_SUFFIX); - setLinearCurve(config->ignitionLoadBins, IGN_LOAD_COUNT, 20, 120, 1); + setLinearCurve(config->ignitionLoadBins, 20, 120, 1); setAlgorithm(LM_SPEED_DENSITY PASS_CONFIG_PARAMETER_SUFFIX); @@ -434,8 +434,8 @@ void setDodgeNeonNGCEngineConfiguration(DECLARE_CONFIG_PARAMETER_SIGNATURE) { boardConfiguration->clutchDownPin = GPIOC_12; boardConfiguration->clutchDownPinMode = PI_PULLUP; -// boardConfiguration->clutchUpPin = GPIOA_14; // note SWCLK - conflict with SWD - boardConfiguration->clutchUpPinMode = PI_PULLUP; +// engineConfiguration->clutchUpPin = GPIOA_14; // note SWCLK - conflict with SWD + engineConfiguration->clutchUpPinMode = PI_PULLUP; engineConfiguration->activateAuxPid1 = 1; engineConfiguration->auxPidPins[0] = GPIOD_5; // playing with AUX PID for alternator @@ -456,7 +456,7 @@ void setDodgeNeonNGCEngineConfiguration(DECLARE_CONFIG_PARAMETER_SIGNATURE) { // setFsioExt(0, GPIOE_5, "0 fsio_setting", 400 PASS_CONFIG_PARAMETER_SUFFIX); #endif - boardConfiguration->vehicleSpeedSensorInputPin = GPIOA_8; + engineConfiguration->vehicleSpeedSensorInputPin = GPIOA_8; engineConfiguration->fanOnTemperature = 92; engineConfiguration->fanOffTemperature = 89; diff --git a/firmware/config/engines/ford_festiva.cpp b/firmware/config/engines/ford_festiva.cpp index d2fb46d52f..1ebc26f6b8 100644 --- a/firmware/config/engines/ford_festiva.cpp +++ b/firmware/config/engines/ford_festiva.cpp @@ -149,7 +149,7 @@ void setFordEscortGt(DECLARE_CONFIG_PARAMETER_SIGNATURE) { engineConfiguration->crankingTimingAngle = 3; engineConfiguration->crankingChargeAngle = 70; - setLinearCurve(config->ignitionLoadBins, IGN_LOAD_COUNT, 20, 105, 5); + setLinearCurve(config->ignitionLoadBins, 20, 105, 5); setWholeTimingTable_d(10 PASS_CONFIG_PARAMETER_SUFFIX); // set_whole_fuel_map 5 setWholeFuelMap(5 PASS_CONFIG_PARAMETER_SUFFIX); diff --git a/firmware/config/engines/mazda_323.cpp b/firmware/config/engines/mazda_323.cpp index 0f95cc1bcd..08056574d5 100644 --- a/firmware/config/engines/mazda_323.cpp +++ b/firmware/config/engines/mazda_323.cpp @@ -7,7 +7,9 @@ #include "mazda_323.h" -void setMazda323EngineConfiguration(engine_configuration_s *engineConfiguration) { +EXTERN_CONFIG; + +void setMazda323EngineConfiguration(DECLARE_CONFIG_PARAMETER_SIGNATURE) { engineConfiguration->specs.cylindersCount = 4; engineConfiguration->specs.displacement = 1.6; diff --git a/firmware/config/engines/mazda_323.h b/firmware/config/engines/mazda_323.h index e0a95883e2..ff614afc87 100644 --- a/firmware/config/engines/mazda_323.h +++ b/firmware/config/engines/mazda_323.h @@ -10,11 +10,8 @@ * @author Andrey Belomutskiy, (c) 2012-2017 */ -#ifndef MAZDA_323_H_ -#define MAZDA_323_H_ +#pragma once #include "engine_configuration.h" -void setMazda323EngineConfiguration(engine_configuration_s *engineConfiguration); - -#endif /* MAZDA_323_H_ */ +void setMazda323EngineConfiguration(DECLARE_CONFIG_PARAMETER_SIGNATURE); diff --git a/firmware/config/engines/mazda_miata_vvt.cpp b/firmware/config/engines/mazda_miata_vvt.cpp index a0145039e7..cb87c96203 100644 --- a/firmware/config/engines/mazda_miata_vvt.cpp +++ b/firmware/config/engines/mazda_miata_vvt.cpp @@ -304,7 +304,7 @@ void setMazdaMiata2003EngineConfiguration(DECLARE_CONFIG_PARAMETER_SIGNATURE) { boardConfiguration->alternatorControlPin = GPIOE_10; boardConfiguration->alternatorControlPinMode = OM_OPENDRAIN; -// boardConfiguration->vehicleSpeedSensorInputPin = GPIOA_8; +// engineConfiguration->vehicleSpeedSensorInputPin = GPIOA_8; boardConfiguration->vvtCamSensorUseRise = true; @@ -411,12 +411,12 @@ void setMazdaMiata2003EngineConfiguration(DECLARE_CONFIG_PARAMETER_SIGNATURE) { // VNH2SP30 three-wire ETB control // PWM - boardConfiguration->etb1.controlPin1 = GPIOE_6; - boardConfiguration->etb1.controlPinMode = OM_INVERTED; + engineConfiguration->etbIo[0].controlPin1 = GPIOE_6; + engineConfiguration->etbIo[0].controlPinMode = OM_INVERTED; // - boardConfiguration->etb1.directionPin1 = GPIOE_12; + engineConfiguration->etbIo[0].directionPin1 = GPIOE_12; // - boardConfiguration->etb1.directionPin2 = GPIOC_7; + engineConfiguration->etbIo[0].directionPin2 = GPIOC_7; // set_analog_input_pin tps PC3 engineConfiguration->tps1_1AdcChannel = EFI_ADC_13; // PC3 diff --git a/firmware/config/engines/me7pnp.cpp b/firmware/config/engines/me7pnp.cpp index 6b35eaa562..4f9f1721f2 100644 --- a/firmware/config/engines/me7pnp.cpp +++ b/firmware/config/engines/me7pnp.cpp @@ -117,7 +117,7 @@ void vag_18_Turbo(DECLARE_ENGINE_PARAMETER_SIGNATURE) { boardConfiguration->triggerInputPins[0] = GPIOG_7; #endif /* STM32_HAS_GPIOF */ #if defined(STM32_HAS_GPIOF) && STM32_HAS_GPIOF - boardConfiguration->vehicleSpeedSensorInputPin = GPIOF_14; + engineConfiguration->vehicleSpeedSensorInputPin = GPIOF_14; #endif /* STM32_HAS_GPIOF */ @@ -140,10 +140,10 @@ void vag_18_Turbo(DECLARE_ENGINE_PARAMETER_SIGNATURE) { setFsioExt (3, GPIOE_0, "0.15 90 coolant 120 min max 90 - 30 / 0.8 * +", 25 PASS_CONFIG_PARAMETER_SUFFIX); #endif engineConfiguration->auxPidFrequency[3] = 25; - CONFIG(etb1_use_two_wires) = true; + CONFIG(etb_use_two_wires) = true; #if defined(STM32_HAS_GPIOF) && STM32_HAS_GPIOF - CONFIGB(etb1.directionPin1) = GPIOF_15; - CONFIGB(etb1.directionPin2) = GPIOF_14; + CONFIG(etbIo[0].directionPin1) = GPIOF_15; + CONFIG(etbIo[0].directionPin2) = GPIOF_14; #endif /* STM32_HAS_GPIOF */ boardConfiguration->isHip9011Enabled = false; @@ -151,9 +151,8 @@ void vag_18_Turbo(DECLARE_ENGINE_PARAMETER_SIGNATURE) { setFsio (13, GPIOE_5, "0" PASS_CONFIG_PARAMETER_SUFFIX); setFsio (15, GPIOE_6, "1" PASS_CONFIG_PARAMETER_SUFFIX); #endif - CONFIG(etb2_use_two_wires) = true; - CONFIG(etb2.directionPin1) = GPIOE_2; - CONFIG(etb2.directionPin2) = GPIOE_4; + CONFIG(etbIo[1].directionPin1) = GPIOE_2; + CONFIG(etbIo[1].directionPin2) = GPIOE_4; engineConfiguration->etb.pFactor = 1.07; engineConfiguration->etb.iFactor = 0.18; diff --git a/firmware/config/engines/nissan_primera.cpp b/firmware/config/engines/nissan_primera.cpp index ea54528650..5e319d17e9 100644 --- a/firmware/config/engines/nissan_primera.cpp +++ b/firmware/config/engines/nissan_primera.cpp @@ -1,10 +1,11 @@ /** * @file nissan_primera.cpp * - * engine_type 5 + * NISSAN_PRIMERA + * set engine_type 5 * * @date Oct 14, 2013 - * @author Andrey Belomutskiy, (c) 2012-2018 + * @author Andrey Belomutskiy, (c) 2012-2019 */ #include "global.h" @@ -12,11 +13,23 @@ #if EFI_SUPPORT_NISSAN_PRIMERA #include "nissan_primera.h" -void setNissanPrimeraEngineConfiguration(engine_configuration_s *engineConfiguration) { +EXTERN_CONFIG; + +void setNissanPrimeraEngineConfiguration(DECLARE_CONFIG_PARAMETER_SIGNATURE) { + setDefaultFrankensoConfiguration(PASS_CONFIG_PARAMETER_SIGNATURE); + engineConfiguration->trigger.type = TT_NISSAN_SR20VE; + + boardConfiguration->ignitionPins[0] = GPIOD_7; + boardConfiguration->ignitionPins[1] = GPIO_UNASSIGNED; + boardConfiguration->ignitionPins[2] = GPIOD_6; + + + engineConfiguration->auxValves[0] = GPIOE_14; + engineConfiguration->auxValves[1] = GPIOE_12; } -void setNissanPrimeraEngineConfiguration_360(engine_configuration_s *engineConfiguration) { +void setNissanPrimeraEngineConfiguration_360(DECLARE_CONFIG_PARAMETER_SIGNATURE) { engineConfiguration->trigger.type = TT_NISSAN_SR20VE_360; } diff --git a/firmware/config/engines/nissan_primera.h b/firmware/config/engines/nissan_primera.h index 4d5d316e7a..17daf37936 100644 --- a/firmware/config/engines/nissan_primera.h +++ b/firmware/config/engines/nissan_primera.h @@ -2,19 +2,16 @@ * @file nissan_primera.h * * @date Oct 14, 2013 - * @author Andrey Belomutskiy, (c) 2012-2017 + * @author Andrey Belomutskiy, (c) 2012-2019 */ -#ifndef NISSAN_PRIMERA_H_ -#define NISSAN_PRIMERA_H_ +#pragma once #if EFI_SUPPORT_NISSAN_PRIMERA #include "engine_configuration.h" -void setNissanPrimeraEngineConfiguration(engine_configuration_s *engineConfiguration); -void setNissanPrimeraEngineConfiguration_360(engine_configuration_s *engineConfiguration); +void setNissanPrimeraEngineConfiguration(DECLARE_CONFIG_PARAMETER_SIGNATURE); +void setNissanPrimeraEngineConfiguration_360(DECLARE_CONFIG_PARAMETER_SIGNATURE); #endif /* EFI_SUPPORT_NISSAN_PRIMERA */ - -#endif /* NISSAN_PRIMERA_H_ */ diff --git a/firmware/config/engines/rover_v8.cpp b/firmware/config/engines/rover_v8.cpp index 883592e5d9..417fa006a2 100644 --- a/firmware/config/engines/rover_v8.cpp +++ b/firmware/config/engines/rover_v8.cpp @@ -88,7 +88,7 @@ void setRoverv8(DECLARE_CONFIG_PARAMETER_SIGNATURE) { boardConfiguration->injectionPins[6] = GPIOE_2; // Frankenstein: low side - out #7 boardConfiguration->injectionPins[7] = GPIOE_3; // Frankenstein: low side - out #8 -// not valid ICU pin boardConfiguration->vehicleSpeedSensorInputPin = GPIOC_2; +// not valid ICU pin engineConfiguration->vehicleSpeedSensorInputPin = GPIOC_2; //GPIOE_0 AND GPIOE_1 are bad pins since they conflict with accelerometer //no malfunction indicator pin needed, since we use CAN_BUS_MAZDA_RX8 diff --git a/firmware/config/engines/sachs.cpp b/firmware/config/engines/sachs.cpp index a9cc428be2..f811931d64 100644 --- a/firmware/config/engines/sachs.cpp +++ b/firmware/config/engines/sachs.cpp @@ -85,11 +85,11 @@ void setSachs(DECLARE_CONFIG_PARAMETER_SIGNATURE) { // todo: extract a method? figure out something smarter setFuelRpmBin(800, 15000 PASS_CONFIG_PARAMETER_SUFFIX); setTimingRpmBin(800, 15000 PASS_CONFIG_PARAMETER_SUFFIX); - setLinearCurve(config->veRpmBins, FUEL_RPM_COUNT, 15000, 7000, 1); - setLinearCurve(config->afrRpmBins, FUEL_RPM_COUNT, 15000, 7000, 1); + setLinearCurve(config->veRpmBins, 15000, 7000, 1); + setLinearCurve(config->afrRpmBins, 15000, 7000, 1); engineConfiguration->hasFrequencyReportingMapSensor = true; - boardConfiguration->frequencyReportingMapInputPin = GPIOC_6; + engineConfiguration->frequencyReportingMapInputPin = GPIOC_6; boardConfiguration->mapFrequency100Kpa = 159; boardConfiguration->mapFrequency0Kpa = 80; } diff --git a/firmware/config/stm32f4ems/chconf.h b/firmware/config/stm32f4ems/chconf.h index ce3817b05a..ac805a917b 100644 --- a/firmware/config/stm32f4ems/chconf.h +++ b/firmware/config/stm32f4ems/chconf.h @@ -52,7 +52,7 @@ #if !defined(ENABLE_PERF_TRACE) || defined(__DOXYGEN__) // looks like this value could not be defined in efifeatures.h - please define either externally or just change the value here - #define ENABLE_PERF_TRACE FALSE + #define ENABLE_PERF_TRACE TRUE #endif /* ENABLE_PERF_TRACE */ #include "chconf_common.h" @@ -132,7 +132,7 @@ * must be set to zero in that case. */ #if !defined(CH_CFG_TIME_QUANTUM) -#define CH_CFG_TIME_QUANTUM 20 +#define CH_CFG_TIME_QUANTUM 0 #endif /** @@ -147,7 +147,7 @@ * @note Requires @p CH_CFG_USE_MEMCORE. */ #if !defined(CH_CFG_MEMCORE_SIZE) -#define CH_CFG_MEMCORE_SIZE 2048 +#define CH_CFG_MEMCORE_SIZE 0 #endif /** @@ -346,7 +346,7 @@ * @note The default is @p TRUE. * @note Requires @p CH_CFG_USE_SEMAPHORES. */ -#define CH_CFG_USE_MAILBOXES TRUE +#define CH_CFG_USE_MAILBOXES FALSE /** * @brief I/O Queues APIs. @@ -354,7 +354,7 @@ * * @note The default is @p TRUE. */ -#define CH_CFG_USE_QUEUES TRUE +#define CH_CFG_USE_QUEUES FALSE /** * @brief Core Memory Manager APIs. @@ -364,7 +364,7 @@ * @note The default is @p TRUE. */ #if !defined(CH_CFG_USE_MEMCORE) -#define CH_CFG_USE_MEMCORE TRUE +#define CH_CFG_USE_MEMCORE FALSE #endif /** @@ -378,7 +378,7 @@ * @note Mutexes are recommended. */ #if !defined(CH_CFG_USE_HEAP) -#define CH_CFG_USE_HEAP TRUE +#define CH_CFG_USE_HEAP FALSE #endif /** @@ -389,7 +389,7 @@ * @note The default is @p TRUE. */ #if !defined(CH_CFG_USE_MEMPOOLS) -#define CH_CFG_USE_MEMPOOLS TRUE +#define CH_CFG_USE_MEMPOOLS FALSE #endif /** diff --git a/firmware/config/stm32f4ems/efifeatures.h b/firmware/config/stm32f4ems/efifeatures.h index 4ee9074219..f232636b48 100644 --- a/firmware/config/stm32f4ems/efifeatures.h +++ b/firmware/config/stm32f4ems/efifeatures.h @@ -57,8 +57,8 @@ /** * Build-in logic analyzer support. Logic analyzer viewer is one of the java console panes. */ -#ifndef EFI_WAVE_ANALYZER -#define EFI_WAVE_ANALYZER TRUE +#ifndef EFI_LOGIC_ANALYZER +#define EFI_LOGIC_ANALYZER TRUE #endif #ifndef EFI_ICU_INPUTS @@ -194,7 +194,7 @@ #define EFI_IDLE_CONTROL TRUE #endif -#define EFI_IDLE_INCREMENTAL_PID_CIC FALSE +#define EFI_IDLE_PID_CIC FALSE /** * Control the main power relay based on measured ignition voltage (Vbatt) diff --git a/firmware/config/stm32f7ems/chconf.h b/firmware/config/stm32f7ems/chconf.h index bf11a66bc5..6adecfefcb 100644 --- a/firmware/config/stm32f7ems/chconf.h +++ b/firmware/config/stm32f7ems/chconf.h @@ -31,11 +31,24 @@ #define _CHIBIOS_RT_CONF_ #define _CHIBIOS_RT_CONF_VER_5_1_ -#define CHPRINTF_USE_FLOAT TRUE +/* + * __process_stack_size__ and __process_stack_size__ defaults are each hard-coded as 0x400 in ChibiOS rules.mk files + * rusEfi do not override these defaults. + * + * http://www.chibios.com/forum/viewtopic.php?t=309 + * "__main_stack_size__ is the size of INTERRUPTS stack" + * "__process_stack_size__ is the stack of the C-runtime, in ChibiOS the "main" thread uses the C-runtime stack." + * + */ -#if !defined(EFI_CLOCK_LOCKS) || defined(__DOXYGEN__) - #define EFI_CLOCK_LOCKS FALSE -#endif /* EFI_CLOCK_LOCKS */ +#define PORT_IDLE_THREAD_STACK_SIZE 1024 + +// rusEfi main processing happens on IRQ so PORT_INT_REQUIRED_STACK has to be pretty large. +// see also a strange comment about PORT_INT_REQUIRED_STACK in global_shared.h +// see also http://www.chibios.org/dokuwiki/doku.php?id=chibios:kb:stacks +#define PORT_INT_REQUIRED_STACK 768 + +#define CHPRINTF_USE_FLOAT TRUE #if !defined(ENABLE_PERF_TRACE) || defined(__DOXYGEN__) // looks like this value could not be defined in efifeatures.h - please define either externally or just change the value here @@ -44,7 +57,6 @@ #include "chconf_common.h" - /*===========================================================================*/ /** * @name System timers settings @@ -56,18 +68,14 @@ * @brief System time counter resolution. * @note Allowed values are 16 or 32 bits. */ -#if !defined(CH_CFG_ST_RESOLUTION) #define CH_CFG_ST_RESOLUTION 32 -#endif /** * @brief System tick frequency. * @details Frequency of the system timer that drives the system ticks. This * setting also defines the system tick time unit. */ -#if !defined(CH_CFG_ST_FREQUENCY) #define CH_CFG_ST_FREQUENCY 1000 -#endif /** * @brief Time intervals data size. @@ -338,9 +346,15 @@ * @note The default is @p TRUE. * @note Requires @p CH_CFG_USE_SEMAPHORES. */ -#if !defined(CH_CFG_USE_MAILBOXES) -#define CH_CFG_USE_MAILBOXES TRUE -#endif +#define CH_CFG_USE_MAILBOXES FALSE + +/** + * @brief I/O Queues APIs. + * @details If enabled then the I/O queues APIs are included in the kernel. + * + * @note The default is @p TRUE. + */ +#define CH_CFG_USE_QUEUES FALSE /** * @brief Core Memory Manager APIs. @@ -350,7 +364,7 @@ * @note The default is @p TRUE. */ #if !defined(CH_CFG_USE_MEMCORE) -#define CH_CFG_USE_MEMCORE TRUE +#define CH_CFG_USE_MEMCORE FALSE #endif /** @@ -378,17 +392,6 @@ #define CH_CFG_USE_MEMPOOLS FALSE #endif -/** - * @brief Objects FIFOs APIs. - * @details If enabled then the objects FIFOs APIs are included - * in the kernel. - * - * @note The default is @p TRUE. - */ -#if !defined(CH_CFG_USE_OBJ_FIFOS) -#define CH_CFG_USE_OBJ_FIFOS FALSE -#endif - /** * @brief Dynamic Threads APIs. * @details If enabled then the dynamic threads creation APIs are included @@ -402,6 +405,17 @@ #define CH_CFG_USE_DYNAMIC FALSE #endif +/** + * @brief Objects FIFOs APIs. + * @details If enabled then the objects FIFOs APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_CFG_USE_OBJ_FIFOS) +#define CH_CFG_USE_OBJ_FIFOS FALSE +#endif + /** @} */ /*===========================================================================*/ @@ -456,7 +470,7 @@ * @brief Enables factory for mailboxes. */ #if !defined(CH_CFG_FACTORY_MAILBOXES) -#define CH_CFG_FACTORY_MAILBOXES TRUE +#define CH_CFG_FACTORY_MAILBOXES FALSE #endif /** @@ -495,6 +509,12 @@ #define CH_DBG_SYSTEM_STATE_CHECK TRUE #endif +/** + * micro-optimization: use same (lower-level) api for lock/unlock regardless on context + * this saves us one branching + */ +#define USE_PORT_LOCK FALSE + /** * @brief Debug option, parameters checks. * @details If enabled then the checks on the API functions input @@ -503,7 +523,7 @@ * @note The default is @p FALSE. */ #if !defined(CH_DBG_ENABLE_CHECKS) -#define CH_DBG_ENABLE_CHECKS FALSE +#define CH_DBG_ENABLE_CHECKS TRUE #endif /** @@ -515,7 +535,7 @@ * @note The default is @p FALSE. */ #if !defined(CH_DBG_ENABLE_ASSERTS) -#define CH_DBG_ENABLE_ASSERTS FALSE +#define CH_DBG_ENABLE_ASSERTS TRUE #endif /** @@ -537,6 +557,17 @@ #define CH_DBG_TRACE_BUFFER_SIZE 128 #endif +/** + * @brief Debug option, trace buffer. + * @details If enabled then the context switch circular trace buffer is + * activated. + * + * @note The default is @p FALSE. + */ +#ifndef CH_DBG_ENABLE_TRACE +#define CH_DBG_ENABLE_TRACE FALSE +#endif + /** * @brief Debug option, stack checks. * @details If enabled then a runtime stack check is performed. @@ -548,7 +579,7 @@ * @p panic_msg variable set to @p NULL. */ #if !defined(CH_DBG_ENABLE_STACK_CHECK) -#define CH_DBG_ENABLE_STACK_CHECK FALSE +#define CH_DBG_ENABLE_STACK_CHECK TRUE #endif /** @@ -559,8 +590,9 @@ * * @note The default is @p FALSE. */ +// see also CH_DBG_STACK_FILL_VALUE #if !defined(CH_DBG_FILL_THREADS) -#define CH_DBG_FILL_THREADS FALSE +#define CH_DBG_FILL_THREADS TRUE #endif /** @@ -606,13 +638,15 @@ * @details User fields added to the end of the @p thread_t structure. */ #define CH_CFG_THREAD_EXTRA_FIELDS \ + void *activeStack; \ + int remainingStack; \ /* Add threads custom fields here.*/ /** * @brief Threads initialization hook. - * @details User initialization code added to the @p _thread_init() function. + * @details User initialization code added to the @p chThdInit() API. * - * @note It is invoked from within @p _thread_init() and implicitly from all + * @note It is invoked from within @p chThdInit() and implicitly from all * the threads creation APIs. */ #define CH_CFG_THREAD_INIT_HOOK(tp) { \ @@ -622,6 +656,10 @@ /** * @brief Threads finalization hook. * @details User finalization code added to the @p chThdExit() API. + * + * @note It is inserted into lock zone. + * @note It is also invoked when the threads simply return in order to + * terminate. */ #define CH_CFG_THREAD_EXIT_HOOK(tp) { \ /* Add threads finalization code here.*/ \ @@ -632,7 +670,7 @@ * @details This hook is invoked just before switching between threads. */ #define CH_CFG_CONTEXT_SWITCH_HOOK(ntp, otp) { \ - /* Context switch code here.*/ \ + contextSwitchHook(); \ } /** @@ -640,6 +678,7 @@ */ #define CH_CFG_IRQ_PROLOGUE_HOOK() { \ /* IRQ prologue code here.*/ \ + irqEnterHook(); \ } /** @@ -647,6 +686,7 @@ */ #define CH_CFG_IRQ_EPILOGUE_HOOK() { \ /* IRQ epilogue code here.*/ \ + irqExitHook(); \ } /** @@ -656,7 +696,6 @@ * @note This macro can be used to activate a power saving mode. */ #define CH_CFG_IDLE_ENTER_HOOK() { \ - /* Idle-enter code here.*/ \ } /** @@ -666,7 +705,6 @@ * @note This macro can be used to deactivate a power saving mode. */ #define CH_CFG_IDLE_LEAVE_HOOK() { \ - /* Idle-leave code here.*/ \ } /** @@ -693,7 +731,7 @@ */ #define CH_CFG_SYSTEM_HALT_HOOK(reason) { \ /* System halt code here.*/ \ - chDbgPanic3(reason, __FILE__, __LINE__); \ + chDbgPanic3(reason, __FILE__, __LINE__); \ } /** @@ -705,6 +743,7 @@ /* Trace code here.*/ \ } + /** @} */ /*===========================================================================*/ diff --git a/firmware/config/stm32f7ems/mcuconf.h b/firmware/config/stm32f7ems/mcuconf.h index 8b4d1269a4..4059ae77d7 100644 --- a/firmware/config/stm32f7ems/mcuconf.h +++ b/firmware/config/stm32f7ems/mcuconf.h @@ -38,6 +38,11 @@ */ #define UART_DMA_IRQ_PRIORITY (PRECISE_SCHEDULING_TIMER_PRIORITY + 2) +/* + * SysTick driver system settings. + */ +#define STM32_ST_IRQ_PRIORITY 8 +#define STM32_ST_USE_TIMER 2 /* * STM32F7xx drivers configuration. @@ -162,8 +167,8 @@ #define STM32_DAC_DUAL_MODE FALSE #define STM32_DAC_USE_DAC1_CH1 FALSE #define STM32_DAC_USE_DAC1_CH2 FALSE -#define STM32_DAC_DAC1_CH1_IRQ_PRIORITY 10 -#define STM32_DAC_DAC1_CH2_IRQ_PRIORITY 10 +#define STM32_DAC_DAC1_CH1_IRQ_PRIORITY PRECISE_SCHEDULING_TIMER_PRIORITY + 6 +#define STM32_DAC_DAC1_CH2_IRQ_PRIORITY PRECISE_SCHEDULING_TIMER_PRIORITY + 6 #define STM32_DAC_DAC1_CH1_DMA_PRIORITY 2 #define STM32_DAC_DAC1_CH2_DMA_PRIORITY 2 #define STM32_DAC_DAC1_CH1_DMA_STREAM STM32_DMA_STREAM_ID(1, 5) @@ -172,18 +177,19 @@ /* * EXT driver system settings. */ -#define STM32_EXT_EXTI0_IRQ_PRIORITY PRECISE_SCHEDULING_TIMER_PRIORITY + 2 -#define STM32_EXT_EXTI1_IRQ_PRIORITY PRECISE_SCHEDULING_TIMER_PRIORITY + 2 -#define STM32_EXT_EXTI2_IRQ_PRIORITY PRECISE_SCHEDULING_TIMER_PRIORITY + 2 -#define STM32_EXT_EXTI3_IRQ_PRIORITY PRECISE_SCHEDULING_TIMER_PRIORITY + 2 -#define STM32_EXT_EXTI4_IRQ_PRIORITY PRECISE_SCHEDULING_TIMER_PRIORITY + 2 -#define STM32_EXT_EXTI5_9_IRQ_PRIORITY PRECISE_SCHEDULING_TIMER_PRIORITY + 2 -#define STM32_EXT_EXTI10_15_IRQ_PRIORITY PRECISE_SCHEDULING_TIMER_PRIORITY + 2 -#define STM32_EXT_EXTI16_IRQ_PRIORITY PRECISE_SCHEDULING_TIMER_PRIORITY + 2 +#define STM32_EXT_EXT_IRQ_PRIORITY ICU_PRIORITY +#define STM32_EXT_EXTI0_IRQ_PRIORITY STM32_EXT_EXT_IRQ_PRIORITY +#define STM32_EXT_EXTI1_IRQ_PRIORITY STM32_EXT_EXT_IRQ_PRIORITY +#define STM32_EXT_EXTI2_IRQ_PRIORITY STM32_EXT_EXT_IRQ_PRIORITY +#define STM32_EXT_EXTI3_IRQ_PRIORITY STM32_EXT_EXT_IRQ_PRIORITY +#define STM32_EXT_EXTI4_IRQ_PRIORITY STM32_EXT_EXT_IRQ_PRIORITY +#define STM32_EXT_EXTI5_9_IRQ_PRIORITY STM32_EXT_EXT_IRQ_PRIORITY +#define STM32_EXT_EXTI10_15_IRQ_PRIORITY STM32_EXT_EXT_IRQ_PRIORITY +#define STM32_EXT_EXTI16_IRQ_PRIORITY STM32_EXT_EXT_IRQ_PRIORITY #define STM32_EXT_EXTI17_IRQ_PRIORITY 15 -#define STM32_EXT_EXTI18_IRQ_PRIORITY PRECISE_SCHEDULING_TIMER_PRIORITY + 2 -#define STM32_EXT_EXTI19_IRQ_PRIORITY PRECISE_SCHEDULING_TIMER_PRIORITY + 2 -#define STM32_EXT_EXTI20_IRQ_PRIORITY PRECISE_SCHEDULING_TIMER_PRIORITY + 2 +#define STM32_EXT_EXTI18_IRQ_PRIORITY STM32_EXT_EXT_IRQ_PRIORITY +#define STM32_EXT_EXTI19_IRQ_PRIORITY STM32_EXT_EXT_IRQ_PRIORITY +#define STM32_EXT_EXTI20_IRQ_PRIORITY STM32_EXT_EXT_IRQ_PRIORITY #define STM32_EXT_EXTI21_IRQ_PRIORITY 15 #define STM32_EXT_EXTI22_IRQ_PRIORITY 15 @@ -356,11 +362,6 @@ #define STM32_SPI_SPI6_IRQ_PRIORITY 10 #define STM32_SPI_DMA_ERROR_HOOK(spip) osalSysHalt("DMA failure") -/* - * ST driver system settings. - */ -#define STM32_ST_IRQ_PRIORITY 8 -#define STM32_ST_USE_TIMER 2 /* * UART driver system settings. diff --git a/firmware/console/binary/tunerstudio.cpp b/firmware/console/binary/tunerstudio.cpp index be7ff45cb5..8dc37b6138 100644 --- a/firmware/console/binary/tunerstudio.cpp +++ b/firmware/console/binary/tunerstudio.cpp @@ -76,6 +76,7 @@ #include "bluetooth.h" #include "tunerstudio_io.h" #include "tooth_logger.h" +#include "electronic_throttle.h" #include #include "engine_configuration.h" @@ -94,11 +95,11 @@ #ifndef EFI_IDLE_CONTROL - #if EFI_IDLE_INCREMENTAL_PID_CIC + #if EFI_IDLE_PID_CIC extern PidCic idlePid; #else extern Pid idlePid; - #endif /* EFI_IDLE_INCREMENTAL_PID_CIC */ + #endif /* EFI_IDLE_PID_CIC */ #endif /* EFI_IDLE_CONTROL */ @@ -256,7 +257,7 @@ static void onlineApplyWorkingCopyBytes(int currentPageId, uint32_t offset, int } } -extern Pid etbPid; +extern EtbController etbController[ETB_COUNT]; static const void * getStructAddr(int structId) { switch (structId) { @@ -274,7 +275,7 @@ static const void * getStructAddr(int structId) { return static_cast(&engine->triggerCentral.triggerState); #if EFI_ELECTRONIC_THROTTLE_BODY case LDS_ETB_PID_STATE_INDEX: - return static_cast(&etbPid); + return static_cast(&etbController[0].etbPid); #endif /* EFI_ELECTRONIC_THROTTLE_BODY */ #ifndef EFI_IDLE_CONTROL @@ -487,7 +488,9 @@ static bool isKnownCommand(char command) { || command == TS_GET_LOGGER_BUFFER || command == TS_GET_TEXT || command == TS_CRC_CHECK_COMMAND - || command == TS_GET_FIRMWARE_VERSION; + || command == TS_GET_FIRMWARE_VERSION + || command == TS_PERF_TRACE_BEGIN + || command == TS_PERF_TRACE_GET_BUFFER; } // this function runs indefinitely @@ -852,20 +855,20 @@ int tunerStudioHandleCrcCommand(ts_channel_s *tsChannel, char *data, int incomin } break; - case TS_PERF_TRACE_BEGIN: +#endif /* EFI_TOOTH_LOGGER */ #if ENABLE_PERF_TRACE + case TS_PERF_TRACE_BEGIN: perfTraceEnable(); -#endif /* ENABLE_PERF_TRACE */ + sendOkResponse(tsChannel, TS_CRC); break; case TS_PERF_TRACE_GET_BUFFER: { -#if ENABLE_PERF_TRACE auto trace = perfTraceGetBuffer(); sr5SendResponse(tsChannel, TS_CRC, trace.Buffer, trace.Size); -#endif /* ENABLE_PERF_TRACE */ } -#endif /* EFI_TOOTH_LOGGER */ + break; +#endif /* ENABLE_PERF_TRACE */ default: tunerStudioError("ERROR: ignoring unexpected command"); return false; diff --git a/firmware/console/binary/tunerstudio_io.cpp b/firmware/console/binary/tunerstudio_io.cpp index f56a5318d4..9a6111ea5a 100644 --- a/firmware/console/binary/tunerstudio_io.cpp +++ b/firmware/console/binary/tunerstudio_io.cpp @@ -102,6 +102,10 @@ void startTsPort(ts_channel_s *tsChannel) { if (CONFIGB(useSerialPort)) { print("TunerStudio over USART"); + /** + * We have hard-coded USB serial console so that it would be clear how to connect to each specific board, + * but for UART serial we allow users to change settings. + */ efiSetPadMode("tunerstudio rx", engineConfiguration->binarySerialRxPin, PAL_MODE_ALTERNATE(TS_SERIAL_AF)); efiSetPadMode("tunerstudio tx", engineConfiguration->binarySerialTxPin, PAL_MODE_ALTERNATE(TS_SERIAL_AF)); diff --git a/firmware/console/eficonsole.cpp b/firmware/console/eficonsole.cpp index a002a4363b..120bd0e87e 100644 --- a/firmware/console/eficonsole.cpp +++ b/firmware/console/eficonsole.cpp @@ -78,8 +78,8 @@ static void sayHello(void) { scheduleMsg(&logger, "CH_DBG_SYSTEM_STATE_CHECK=%d", CH_DBG_SYSTEM_STATE_CHECK); scheduleMsg(&logger, "CH_DBG_ENABLE_STACK_CHECK=%d", CH_DBG_ENABLE_STACK_CHECK); -#ifdef EFI_WAVE_ANALYZER - scheduleMsg(&logger, "EFI_WAVE_ANALYZER=%d", EFI_WAVE_ANALYZER); +#ifdef EFI_LOGIC_ANALYZER + scheduleMsg(&logger, "EFI_LOGIC_ANALYZER=%d", EFI_LOGIC_ANALYZER); #endif #ifdef EFI_TUNER_STUDIO scheduleMsg(&logger, "EFI_TUNER_STUDIO=%d", EFI_TUNER_STUDIO); diff --git a/firmware/console/status_loop.cpp b/firmware/console/status_loop.cpp index 920c0c916a..9f0b9ee948 100644 --- a/firmware/console/status_loop.cpp +++ b/firmware/console/status_loop.cpp @@ -30,9 +30,9 @@ #include "engine_controller.h" #include "adc_inputs.h" -#if EFI_WAVE_ANALYZER -#include "wave_analyzer.h" -#endif /* EFI_WAVE_ANALYZER */ +#if EFI_LOGIC_ANALYZER +#include "logic_analyzer.h" +#endif /* EFI_LOGIC_ANALYZER */ #include "trigger_central.h" #include "allsensors.h" @@ -458,10 +458,10 @@ void printOverallStatus(systime_t nowSeconds) { printOutPin(PROTOCOL_HIP_NAME, CONFIGB(hip9011IntHoldPin)); printOutPin(PROTOCOL_TACH_NAME, CONFIGB(tachOutputPin)); printOutPin(PROTOCOL_DIZZY_NAME, engineConfiguration->dizzySparkOutputPin); -#if EFI_WAVE_ANALYZER +#if EFI_LOGIC_ANALYZER printOutPin(PROTOCOL_WA_CHANNEL_1, CONFIGB(logicAnalyzerPins)[0]); printOutPin(PROTOCOL_WA_CHANNEL_2, CONFIGB(logicAnalyzerPins)[1]); -#endif /* EFI_WAVE_ANALYZER */ +#endif /* EFI_LOGIC_ANALYZER */ for (int i = 0; i < engineConfiguration->specs.cylindersCount; i++) { printOutPin(enginePins.coils[i].getShortName(), CONFIGB(ignitionPins)[i]); @@ -524,9 +524,9 @@ void updateDevConsoleState(void) { chThdSleepMilliseconds(200); #endif -#if EFI_WAVE_ANALYZER +#if EFI_LOGIC_ANALYZER printWave(&logger); -#endif /* EFI_WAVE_ANALYZER */ +#endif /* EFI_LOGIC_ANALYZER */ scheduleLogging(&logger); } @@ -741,7 +741,7 @@ void updateTunerStudioState(TunerStudioOutputChannels *tsOutputChannels DECLARE_ tsOutputChannels->vBatt = getVBatt(PASS_ENGINE_PARAMETER_SIGNATURE); } // offset 32 - tsOutputChannels->tpsADC = getTPS12bitAdc(PASS_ENGINE_PARAMETER_SIGNATURE) / TPS_TS_CONVERSION; + tsOutputChannels->tpsADC = getTPS12bitAdc(0 PASS_ENGINE_PARAMETER_SUFFIX) / TPS_TS_CONVERSION; // offset 36 #if EFI_ANALOG_SENSORS tsOutputChannels->baroPressure = hasBaroSensor() ? getBaroPressure() : 0; diff --git a/firmware/controllers/actuators/alternator_controller.cpp b/firmware/controllers/actuators/alternator_controller.cpp index a904422368..44ac40ff64 100644 --- a/firmware/controllers/actuators/alternator_controller.cpp +++ b/firmware/controllers/actuators/alternator_controller.cpp @@ -133,9 +133,9 @@ void setAltPFactor(float p) { static void applyAlternatorPinState(int stateIndex, PwmConfig *state) /* pwm_gen_callback */ { efiAssertVoid(CUSTOM_ERR_6643, stateIndex < PWM_PHASE_MAX_COUNT, "invalid stateIndex"); - efiAssertVoid(CUSTOM_IDLE_WAVE_CNT, state->multiWave.waveCount == 1, "invalid idle waveCount"); + efiAssertVoid(CUSTOM_IDLE_WAVE_CNT, state->multiChannelStateSequence.waveCount == 1, "invalid idle waveCount"); OutputPin *output = state->outputPins[0]; - int value = state->multiWave.getChannelState(/*channelIndex*/0, stateIndex); + int value = state->multiChannelStateSequence.getChannelState(/*channelIndex*/0, stateIndex); /** * 'engine->isAlternatorControlEnabled' would be false is RPM is too low */ diff --git a/firmware/controllers/actuators/aux_pid.cpp b/firmware/controllers/actuators/aux_pid.cpp index 1b45c5f6da..9937b935ce 100644 --- a/firmware/controllers/actuators/aux_pid.cpp +++ b/firmware/controllers/actuators/aux_pid.cpp @@ -134,9 +134,11 @@ void startAuxPins(void) { } void stopAuxPins(void) { +#if EFI_PROD_CODE for (int i = 0;i < AUX_PID_COUNT;i++) { brain_pin_markUnused(activeConfiguration.auxPidPins[i]); } +#endif /* EFI_PROD_CODE */ } void initAuxPid(Logging *sharedLogger) { diff --git a/firmware/controllers/actuators/electronic_throttle.cpp b/firmware/controllers/actuators/electronic_throttle.cpp index b30c829ed6..51dacd6f75 100644 --- a/firmware/controllers/actuators/electronic_throttle.cpp +++ b/firmware/controllers/actuators/electronic_throttle.cpp @@ -86,9 +86,9 @@ #error "Unexpected OS ACCESS HERE" #endif +#ifndef ETB_MAX_COUNT #define ETB_MAX_COUNT 2 - -static bool shouldResetPid = false; +#endif /* ETB_MAX_COUNT */ static pid_s tuneWorkingPidSettings; static Pid tuneWorkingPid(&tuneWorkingPidSettings); @@ -103,7 +103,7 @@ static bool startupPositionError = false; #define STARTUP_NEUTRAL_POSITION_ERROR_THRESHOLD 5 -class EtbControl { +class EtbHardware { private: OutputPin m_pinEnable; OutputPin m_pinDir1; @@ -116,9 +116,7 @@ private: SimplePwm etbPwmUp; public: - DECLARE_ENGINE_PTR; - - EtbControl() : etbPwmUp("etbUp"), dcMotor(&m_pwmEnable, &m_pwmDir1, &m_pwmDir2) {} + EtbHardware() : etbPwmUp("etbUp"), dcMotor(&m_pwmEnable, &m_pwmDir1, &m_pwmDir2) {} TwoPinDcMotor dcMotor; @@ -133,49 +131,48 @@ public: // since we have pointer magic here we cannot simply have value parameter pin_output_mode_e *pinEnableMode, brain_pin_e pinDir1, - brain_pin_e pinDir2) { - dcMotor.SetType(useTwoWires ? TwoPinDcMotor::ControlType::PwmDirectionPins : TwoPinDcMotor::ControlType::PwmEnablePin); + brain_pin_e pinDir2, + ExecutorInterface* executor, + int frequency) { + dcMotor.setType(useTwoWires ? TwoPinDcMotor::ControlType::PwmDirectionPins : TwoPinDcMotor::ControlType::PwmEnablePin); m_pinEnable.initPin("ETB Enable", pinEnable, pinEnableMode); m_pinDir1.initPin("ETB Dir 1", pinDir1); m_pinDir2.initPin("ETB Dir 2", pinDir2); // Clamp to >100hz - int freq = maxI(100, engineConfiguration->etbFreq); + int clampedFrequency = maxI(100, frequency); // no need to complicate event queue with ETB PWM in unit tests #if ! EFI_UNIT_TEST startSimplePwm(&m_pwmEnable, "ETB Enable", - &engine->executor, + executor, &m_pinEnable, - freq, + clampedFrequency, 0, (pwm_gen_callback*)applyPinState); startSimplePwm(&m_pwmDir1, "ETB Dir 1", - &engine->executor, + executor, &m_pinDir1, - freq, + clampedFrequency, 0, (pwm_gen_callback*)applyPinState); startSimplePwm(&m_pwmDir2, "ETB Dir 2", - &engine->executor, + executor, &m_pinDir2, - freq, + clampedFrequency, 0, (pwm_gen_callback*)applyPinState); #endif /* EFI_UNIT_TEST */ } }; -static EtbControl etb1; extern percent_t mockPedalPosition; -Pid etbPid; - static percent_t directPwmValue = NAN; static percent_t currentEtbDuty; @@ -183,151 +180,167 @@ static percent_t currentEtbDuty; // this macro clamps both positive and negative percentages from about -100% to 100% #define ETB_PERCENT_TO_DUTY(X) (maxF(minF((X * 0.01), ETB_DUTY_LIMIT - 0.01), 0.01 - ETB_DUTY_LIMIT)) +void EtbController::init(DcMotor *motor, int ownIndex) { + this->m_motor = motor; + this->ownIndex = ownIndex; +} - int EtbController::getPeriodMs() { - return GET_PERIOD_LIMITED(&engineConfiguration->etb); +int EtbController::getPeriodMs() { + return GET_PERIOD_LIMITED(&engineConfiguration->etb); +} + +void EtbController::PeriodicTask() { + // set debug_mode 17 + if (engineConfiguration->debugMode == DBG_ELECTRONIC_THROTTLE_PID) { +#if EFI_TUNER_STUDIO + etbPid.postState(&tsOutputChannels); + tsOutputChannels.debugIntField5 = engine->engineState.etbFeedForward; +#endif /* EFI_TUNER_STUDIO */ + } else if (engineConfiguration->debugMode == DBG_ELECTRONIC_THROTTLE_EXTRA) { +#if EFI_TUNER_STUDIO + // set debug_mode 29 + tsOutputChannels.debugFloatField1 = directPwmValue; +#endif /* EFI_TUNER_STUDIO */ } - void EtbController::PeriodicTask() { - // set debug_mode 17 - if (engineConfiguration->debugMode == DBG_ELECTRONIC_THROTTLE_PID) { + if (!m_motor) { + return; + } + + if (startupPositionError) { + m_motor->set(0); + return; + } + + if (shouldResetPid) { + etbPid.reset(); + shouldResetPid = false; + } + + if (!cisnan(directPwmValue)) { + m_motor->set(directPwmValue); + return; + } + + if (boardConfiguration->pauseEtbControl) { + m_motor->set(0); + return; + } + + percent_t actualThrottlePosition = getTPSWithIndex(ownIndex PASS_ENGINE_PARAMETER_SUFFIX); + + if (engine->etbAutoTune) { + autoTune.input = actualThrottlePosition; + bool result = autoTune.Runtime(&logger); + + tuneWorkingPid.updateFactors(autoTune.output, 0, 0); + + float value = tuneWorkingPid.getOutput(50, actualThrottlePosition); + scheduleMsg(&logger, "AT input=%f output=%f PID=%f", autoTune.input, + autoTune.output, + value); + scheduleMsg(&logger, "AT PID=%f", value); + m_motor->set(ETB_PERCENT_TO_DUTY(value)); + + if (result) { + scheduleMsg(&logger, "GREAT NEWS! %f/%f/%f", autoTune.GetKp(), autoTune.GetKi(), autoTune.GetKd()); + } + + return; + } + + + percent_t pedalPosition = getPedalPosition(PASS_ENGINE_PARAMETER_SIGNATURE); + + int rpm = GET_RPM(); + engine->engineState.targetFromTable = pedal2tpsMap.getValue(rpm / RPM_1_BYTE_PACKING_MULT, pedalPosition); + percent_t etbIdleAddition = CONFIGB(useETBforIdleControl) ? engine->engineState.idle.etbIdleAddition : 0; + percent_t targetPosition = engine->engineState.targetFromTable + etbIdleAddition; + + if (engineConfiguration->debugMode == DBG_ETB_LOGIC) { #if EFI_TUNER_STUDIO - etbPid.postState(&tsOutputChannels); - tsOutputChannels.debugIntField5 = engine->engineState.etbFeedForward; + tsOutputChannels.debugFloatField1 = engine->engineState.targetFromTable; + tsOutputChannels.debugFloatField2 = engine->engineState.idle.etbIdleAddition; #endif /* EFI_TUNER_STUDIO */ - } else if (engineConfiguration->debugMode == DBG_ELECTRONIC_THROTTLE_EXTRA) { -#if EFI_TUNER_STUDIO - // set debug_mode 29 - tsOutputChannels.debugFloatField1 = directPwmValue; -#endif /* EFI_TUNER_STUDIO */ - } + } - if (startupPositionError) { - etb1.dcMotor.Set(0); - return; - } + if (cisnan(targetPosition)) { + // this could happen while changing settings + warning(CUSTOM_ERR_ETB_TARGET, "target"); + return; + } + engine->engineState.etbFeedForward = interpolate2d("etbb", targetPosition, engineConfiguration->etbBiasBins, engineConfiguration->etbBiasValues); - if (shouldResetPid) { - etbPid.reset(); - shouldResetPid = false; - } + etbPid.iTermMin = engineConfiguration->etb_iTermMin; + etbPid.iTermMax = engineConfiguration->etb_iTermMax; - if (!cisnan(directPwmValue)) { - etb1.dcMotor.Set(directPwmValue); - return; - } + currentEtbDuty = engine->engineState.etbFeedForward + + etbPid.getOutput(targetPosition, actualThrottlePosition); - if (boardConfiguration->pauseEtbControl) { - etb1.dcMotor.Set(0); - return; - } + m_motor->set(ETB_PERCENT_TO_DUTY(currentEtbDuty)); - percent_t actualThrottlePosition = getTPS(PASS_ENGINE_PARAMETER_SIGNATURE); + if (engineConfiguration->isVerboseETB) { + etbPid.showPidStatus(&logger, "ETB"); + } - if (engine->etbAutoTune) { - autoTune.input = actualThrottlePosition; - bool result = autoTune.Runtime(&logger); - - tuneWorkingPid.updateFactors(autoTune.output, 0, 0); - - float value = tuneWorkingPid.getOutput(50, actualThrottlePosition); - scheduleMsg(&logger, "AT input=%f output=%f PID=%f", autoTune.input, - autoTune.output, - value); - scheduleMsg(&logger, "AT PID=%f", value); - etb1.dcMotor.Set(ETB_PERCENT_TO_DUTY(value)); - - if (result) { - scheduleMsg(&logger, "GREAT NEWS! %f/%f/%f", autoTune.GetKp(), autoTune.GetKi(), autoTune.GetKd()); - } - - return; - } - - - percent_t pedalPosition = getPedalPosition(PASS_ENGINE_PARAMETER_SIGNATURE); - - int rpm = GET_RPM(); - engine->engineState.targetFromTable = pedal2tpsMap.getValue(rpm / RPM_1_BYTE_PACKING_MULT, pedalPosition); - percent_t etbIdleAddition = CONFIGB(useETBforIdleControl) ? engine->engineState.idle.etbIdleAddition : 0; - percent_t targetPosition = engine->engineState.targetFromTable + etbIdleAddition; - - if (engineConfiguration->debugMode == DBG_ETB_LOGIC) { -#if EFI_TUNER_STUDIO - tsOutputChannels.debugFloatField1 = engine->engineState.targetFromTable; - tsOutputChannels.debugFloatField2 = engine->engineState.idle.etbIdleAddition; -#endif /* EFI_TUNER_STUDIO */ - } - - engine->engineState.etbFeedForward = interpolate2d("etbb", targetPosition, engineConfiguration->etbBiasBins, engineConfiguration->etbBiasValues); - - etbPid.iTermMin = engineConfiguration->etb_iTermMin; - etbPid.iTermMax = engineConfiguration->etb_iTermMax; - - currentEtbDuty = engine->engineState.etbFeedForward + - etbPid.getOutput(targetPosition, actualThrottlePosition); - - etb1.dcMotor.Set(ETB_PERCENT_TO_DUTY(currentEtbDuty)); - - if (engineConfiguration->isVerboseETB) { - etbPid.showPidStatus(&logger, "ETB"); - } - - DISPLAY_STATE(Engine) + DISPLAY_STATE(Engine) DISPLAY(DISPLAY_IF(hasEtbPedalPositionSensor)) - DISPLAY_TEXT(Electronic_Throttle); - DISPLAY_SENSOR(TPS) - DISPLAY_TEXT(eol); + DISPLAY_TEXT(Electronic_Throttle); + DISPLAY_SENSOR(TPS) + DISPLAY_TEXT(eol); - DISPLAY_TEXT(Pedal); - DISPLAY_SENSOR(PPS); - DISPLAY(DISPLAY_CONFIG(throttlePedalPositionAdcChannel)); - DISPLAY_TEXT(eol); + DISPLAY_TEXT(Pedal); + DISPLAY_SENSOR(PPS); + DISPLAY(DISPLAY_CONFIG(throttlePedalPositionAdcChannel)); + DISPLAY_TEXT(eol); - DISPLAY_TEXT(Feed_forward); - DISPLAY(DISPLAY_FIELD(etbFeedForward)); - DISPLAY_TEXT(eol); + DISPLAY_TEXT(Feed_forward); + DISPLAY(DISPLAY_FIELD(etbFeedForward)); + DISPLAY_TEXT(eol); - DISPLAY_STATE(ETB_pid) - DISPLAY_TEXT(input); - DISPLAY(DISPLAY_FIELD(input)); - DISPLAY_TEXT(Output); - DISPLAY(DISPLAY_FIELD(output)); - DISPLAY_TEXT(iTerm); - DISPLAY(DISPLAY_FIELD(iTerm)); - DISPLAY_TEXT(eol); - DISPLAY(DISPLAY_FIELD(errorAmplificationCoef)); - DISPLAY(DISPLAY_FIELD(previousError)); - DISPLAY_TEXT(eol); + DISPLAY_STATE(ETB_pid) + DISPLAY_TEXT(input); + DISPLAY(DISPLAY_FIELD(input)); + DISPLAY_TEXT(Output); + DISPLAY(DISPLAY_FIELD(output)); + DISPLAY_TEXT(iTerm); + DISPLAY(DISPLAY_FIELD(iTerm)); + DISPLAY_TEXT(eol); + DISPLAY(DISPLAY_FIELD(errorAmplificationCoef)); + DISPLAY(DISPLAY_FIELD(previousError)); + DISPLAY_TEXT(eol); - DISPLAY_TEXT(Settings); - DISPLAY(DISPLAY_CONFIG(ETB_PFACTOR)); - DISPLAY(DISPLAY_CONFIG(ETB_IFACTOR)); - DISPLAY(DISPLAY_CONFIG(ETB_DFACTOR)); - DISPLAY_TEXT(eol); - DISPLAY(DISPLAY_CONFIG(ETB_OFFSET)); - DISPLAY(DISPLAY_CONFIG(ETB_PERIODMS)); - DISPLAY_TEXT(eol); - DISPLAY(DISPLAY_CONFIG(ETB_MINVALUE)); - DISPLAY(DISPLAY_CONFIG(ETB_MAXVALUE)); + DISPLAY_TEXT(Settings); + DISPLAY(DISPLAY_CONFIG(ETB_PFACTOR)); + DISPLAY(DISPLAY_CONFIG(ETB_IFACTOR)); + DISPLAY(DISPLAY_CONFIG(ETB_DFACTOR)); + DISPLAY_TEXT(eol); + DISPLAY(DISPLAY_CONFIG(ETB_OFFSET)); + DISPLAY(DISPLAY_CONFIG(ETB_PERIODMS)); + DISPLAY_TEXT(eol); + DISPLAY(DISPLAY_CONFIG(ETB_MINVALUE)); + DISPLAY(DISPLAY_CONFIG(ETB_MAXVALUE)); /* DISPLAY_ELSE */ - DISPLAY_TEXT(No_Pedal_Sensor); + DISPLAY_TEXT(No_Pedal_Sensor); /* DISPLAY_ENDIF */ #if EFI_TUNER_STUDIO - // 312 - tsOutputChannels.etbTarget = targetPosition; - // 316 - tsOutputChannels.etb1DutyCycle = currentEtbDuty; - // 320 - // Error is positive if the throttle needs to open further - tsOutputChannels.etb1Error = targetPosition - actualThrottlePosition; + // 312 + tsOutputChannels.etbTarget = targetPosition; + // 316 + tsOutputChannels.etb1DutyCycle = currentEtbDuty; + // 320 + // Error is positive if the throttle needs to open further + tsOutputChannels.etb1Error = targetPosition - actualThrottlePosition; #endif /* EFI_TUNER_STUDIO */ - } +} -EtbController etbController; +static EtbHardware etbHardware[ETB_COUNT]; +EtbController etbController[ETB_COUNT]; /** + * At the moment there are TWO ways to use this * set_etb_duty X + * set etb X * manual duty cycle control without PID. Percent value from 0 to 100 */ void setThrottleDutyCycle(percent_t level) { @@ -339,14 +352,22 @@ void setThrottleDutyCycle(percent_t level) { float dc = ETB_PERCENT_TO_DUTY(level); directPwmValue = dc; - etb1.dcMotor.Set(dc); + for (int i = 0 ; i < ETB_COUNT; i++) { + etbHardware[i].dcMotor.set(dc); + } scheduleMsg(&logger, "duty ETB duty=%f", dc); } +static bool etbOperational = false; + static void showEthInfo(void) { #if EFI_PROD_CODE static char pinNameBuffer[16]; + if (!etbOperational) { + scheduleMsg(&logger, "ETB DISABLED since no PPS"); + } + scheduleMsg(&logger, "etbAutoTune=%d", engine->etbAutoTune); @@ -357,31 +378,48 @@ static void showEthInfo(void) { getPinNameByAdcChannel("tPedal", engineConfiguration->throttlePedalPositionAdcChannel, pinNameBuffer)); scheduleMsg(&logger, "TPS=%.2f", getTPS(PASS_ENGINE_PARAMETER_SIGNATURE)); - scheduleMsg(&logger, "dir=%d DC=%f", etb1.dcMotor.isOpenDirection(), etb1.dcMotor.Get()); + scheduleMsg(&logger, "etbControlPin1=%s duty=%.2f freq=%d", - hwPortname(CONFIGB(etb1.controlPin1)), + hwPortname(CONFIG(etbIo[0].controlPin1)), currentEtbDuty, engineConfiguration->etbFreq); - scheduleMsg(&logger, "dir1=%s", hwPortname(CONFIGB(etb1.directionPin1))); - scheduleMsg(&logger, "dir2=%s", hwPortname(CONFIGB(etb1.directionPin2))); - etbPid.showPidStatus(&logger, "ETB"); + scheduleMsg(&logger, "dir1=%s", hwPortname(CONFIG(etbIo[0].directionPin1))); + scheduleMsg(&logger, "dir2=%s", hwPortname(CONFIG(etbIo[0].directionPin2))); + + for (int i = 0 ; i < ETB_COUNT; i++) { + EtbHardware *etb = &etbHardware[i]; + + scheduleMsg(&logger, "%d: dir=%d DC=%f", i, etb->dcMotor.isOpenDirection(), etb->dcMotor.get()); + } + + etbController[0].etbPid.showPidStatus(&logger, "ETB"); #endif /* EFI_PROD_CODE */ } +static void etbPidReset() { + for (int i = 0 ; i < ETB_COUNT; i++) { + etbController[i].etbPid.reset(); + } +} + #if EFI_PROD_CODE static void setEtbFrequency(int frequency) { engineConfiguration->etbFreq = frequency; - etb1.setFrequency(frequency); + for (int i = 0 ; i < ETB_COUNT; i++) { + etbHardware[i].setFrequency(frequency); + } } static void etbReset() { scheduleMsg(&logger, "etbReset"); - etb1.dcMotor.Set(0); - etbPid.reset(); + for (int i = 0 ; i < ETB_COUNT; i++) { + etbHardware[i].dcMotor.set(0); + } + etbPidReset(); mockPedalPosition = MOCK_UNDEFINED; } @@ -393,7 +431,7 @@ static void etbReset() { */ void setEtbPFactor(float value) { engineConfiguration->etb.pFactor = value; - etbPid.reset(); + etbPidReset(); showEthInfo(); } @@ -402,7 +440,7 @@ void setEtbPFactor(float value) { */ void setEtbIFactor(float value) { engineConfiguration->etb.iFactor = value; - etbPid.reset(); + etbPidReset(); showEthInfo(); } @@ -411,7 +449,7 @@ void setEtbIFactor(float value) { */ void setEtbDFactor(float value) { engineConfiguration->etb.dFactor = value; - etbPid.reset(); + etbPidReset(); showEthInfo(); } @@ -420,7 +458,7 @@ void setEtbDFactor(float value) { */ void setEtbOffset(int value) { engineConfiguration->etb.offset = value; - etbPid.reset(); + etbPidReset(); showEthInfo(); } @@ -459,8 +497,8 @@ void setBoschVNH2SP30Curve(DECLARE_CONFIG_PARAMETER_SIGNATURE) { void setDefaultEtbParameters(DECLARE_CONFIG_PARAMETER_SIGNATURE) { CONFIG(etbIdleThrottleRange) = 5; - setLinearCurveAny(config->pedalToTpsPedalBins, PEDAL_TO_TPS_SIZE, /*from*/0, /*to*/100, 1); - setLinearCurveAny(config->pedalToTpsRpmBins, PEDAL_TO_TPS_SIZE, /*from*/0, /*to*/8000 / RPM_1_BYTE_PACKING_MULT, 1); + setLinearCurve(config->pedalToTpsPedalBins, /*from*/0, /*to*/100, 1); + setLinearCurve(config->pedalToTpsRpmBins, /*from*/0, /*to*/8000 / RPM_1_BYTE_PACKING_MULT, 1); for (int pedalIndex = 0;pedalIndexbc.etb1, &activeConfiguration.bc.etb1); + for (int i = 0 ; i < ETB_COUNT; i++) { + /** + * We do not want any interruption in HW pin while adjusting other properties + */ + bool changed = isEtbPinsChanged(&engineConfiguration->etbIo[i], &activeConfiguration.etbIo[i]); + if (changed) { + return changed; + } + } + return false; } void stopETBPins(void) { - brain_pin_markUnused(activeConfiguration.bc.etb1.controlPin1); - brain_pin_markUnused(activeConfiguration.bc.etb1.directionPin1); - brain_pin_markUnused(activeConfiguration.bc.etb1.directionPin2); + for (int i = 0 ; i < ETB_COUNT; i++) { + etb_io *activeIo = &activeConfiguration.etbIo[i]; + brain_pin_markUnused(activeIo->controlPin1); + brain_pin_markUnused(activeIo->directionPin1); + brain_pin_markUnused(activeIo->directionPin2); + } } #endif /* EFI_PROD_CODE */ void onConfigurationChangeElectronicThrottleCallback(engine_configuration_s *previousConfiguration) { - shouldResetPid = !etbPid.isSame(&previousConfiguration->etb); + bool shouldResetPid = !etbController[0].etbPid.isSame(&previousConfiguration->etb); + for (int i = 0 ; i < ETB_COUNT; i++) { + etbController[i].shouldResetPid = shouldResetPid; + } } void startETBPins(DECLARE_ENGINE_PARAMETER_SIGNATURE) { - // controlPinMode is a strange feature - it's simply because I am short on 5v I/O on Frankenso with Miata NB2 test mule - etb1.start( - CONFIG(etb1_use_two_wires), - CONFIGB(etb1.controlPin1), - &CONFIGB(etb1.controlPinMode), - CONFIGB(etb1.directionPin1), - CONFIGB(etb1.directionPin2) - ); + for (int i = 0 ; i < ETB_COUNT; i++) { + etb_io *io = &engineConfiguration->etbIo[i]; + // controlPinMode is a strange feature - it's simply because I am short on 5v I/O on Frankenso with Miata NB2 test mule + etbHardware[i].start( + CONFIG(etb_use_two_wires), + io->controlPin1, + &io->controlPinMode, + io->directionPin1, + io->directionPin2, + &ENGINE(executor), + CONFIG(etbFreq) + ); + } } #if EFI_PROD_CODE && 0 @@ -588,10 +643,12 @@ void initElectronicThrottle(DECLARE_ENGINE_PARAMETER_SIGNATURE) { addConsoleActionI("etb_freq", setEtbFrequency); #endif /* EFI_PROD_CODE */ - etbPid.initPidClass(&engineConfiguration->etb); + for (int i = 0 ; i < ETB_COUNT; i++) { + etbController[i].init(&etbHardware[i].dcMotor, i); + etbController[i].etbPid.initPidClass(&engineConfiguration->etb); + INJECT_ENGINE_REFERENCE(&etbController[i]); + } - INJECT_ENGINE_REFERENCE(etb1); - INJECT_ENGINE_REFERENCE(etbController); pedal2tpsMap.init(config->pedalToTpsTable, config->pedalToTpsPedalBins, config->pedalToTpsRpmBins); @@ -599,6 +656,7 @@ void initElectronicThrottle(DECLARE_ENGINE_PARAMETER_SIGNATURE) { if (!engine->engineState.hasEtbPedalPositionSensor) { return; } + etbOperational = true; #if 0 // not alive code autoTune.SetOutputStep(0.1); @@ -621,12 +679,20 @@ void initElectronicThrottle(DECLARE_ENGINE_PARAMETER_SIGNATURE) { #if EFI_PROD_CODE if (engineConfiguration->etbCalibrationOnStart) { - etb1.dcMotor.Set(70); - chThdSleep(600); - grabTPSIsWideOpen(); - etb1.dcMotor.Set(-70); - chThdSleep(600); - grabTPSIsClosed(); + + for (int i = 0 ; i < ETB_COUNT; i++) { + EtbHardware *etb = &etbHardware[i]; + + etb->dcMotor.set(70); + chThdSleep(600); + // todo: grab with proper index + grabTPSIsWideOpen(); + etb->dcMotor.set(-70); + chThdSleep(600); + // todo: grab with proper index + grabTPSIsClosed(); + } + } // manual duty cycle control without PID. Percent value from 0 to 100 @@ -651,9 +717,11 @@ void initElectronicThrottle(DECLARE_ENGINE_PARAMETER_SIGNATURE) { #endif /* EFI_PROD_CODE */ - etbPid.reset(); + etbPidReset(); - etbController.Start(); + for (int i = 0 ; i < ETB_COUNT; i++) { + etbController[i].Start(); + } } #endif /* EFI_ELECTRONIC_THROTTLE_BODY */ diff --git a/firmware/controllers/actuators/electronic_throttle.h b/firmware/controllers/actuators/electronic_throttle.h index 2e0587120b..c2dc136aa5 100644 --- a/firmware/controllers/actuators/electronic_throttle.h +++ b/firmware/controllers/actuators/electronic_throttle.h @@ -14,12 +14,21 @@ #include "engine.h" #include "periodic_task.h" -class EtbController : public PeriodicTimerController { +class DcMotor; + +class EtbController final : public PeriodicTimerController { public: DECLARE_ENGINE_PTR; + void init(DcMotor *motor, int ownIndex); int getPeriodMs() override; void PeriodicTask() override; + Pid etbPid; + bool shouldResetPid = false; + +private: + int ownIndex; + DcMotor *m_motor; }; void initElectronicThrottle(DECLARE_ENGINE_PARAMETER_SIGNATURE); diff --git a/firmware/controllers/actuators/idle_thread.cpp b/firmware/controllers/actuators/idle_thread.cpp index 4fcd9d0e5f..8ee03533a8 100644 --- a/firmware/controllers/actuators/idle_thread.cpp +++ b/firmware/controllers/actuators/idle_thread.cpp @@ -34,6 +34,7 @@ #include "rpm_calculator.h" #include "pwm_generator.h" #include "idle_thread.h" +#include "engine_math.h" #include "engine.h" #include "periodic_task.h" @@ -58,7 +59,7 @@ static bool shouldResetPid = false; // See automaticIdleController(). static bool mightResetPid = false; -#if EFI_IDLE_INCREMENTAL_PID_CIC +#if EFI_IDLE_PID_CIC // Use new PID with CIC integrator PidCic idlePid; #else @@ -85,7 +86,7 @@ public: }; PidWithOverrides idlePid; -#endif /* EFI_IDLE_INCREMENTAL_PID_CIC */ +#endif /* EFI_IDLE_PID_CIC */ // todo: extract interface for idle valve hardware, with solenoid and stepper implementations? static SimplePwm idleSolenoid("idle"); @@ -93,6 +94,8 @@ static SimplePwm idleSolenoid("idle"); static uint32_t lastCrankingCyclesCounter = 0; static float lastCrankingIacPosition; +static iacPidMultiplier_t iacPidMultMap("iacPidMultiplier"); + /** * When the IAC position value change is insignificant (lower than this threshold), leave the poor valve alone * todo: why do we have this logic? is this ever useful? @@ -273,17 +276,18 @@ static percent_t automaticIdleController(DECLARE_ENGINE_PARAMETER_SIGNATURE) { // the state of PID has been changed, so we might reset it now, but only when needed (see idlePidDeactivationTpsThreshold) mightResetPid = true; -#if EFI_IDLE_INCREMENTAL_PID_CIC + // Apply PID Multiplier if used + if (CONFIG(useIacPidMultTable)) { + float engineLoad = getEngineLoadT(PASS_ENGINE_PARAMETER_SIGNATURE); + float multCoef = iacPidMultMap.getValue(rpm / RPM_1_BYTE_PACKING_MULT, engineLoad); + // PID can be completely disabled of multCoef==0, or it just works as usual if multCoef==1 + newValue = interpolateClamped(0.0f, engine->engineState.idle.baseIdlePosition, 1.0f, newValue, multCoef); + } + + // Apply PID Deactivation Threshold as a smooth taper for TPS transients. percent_t tpsPos = getTPS(PASS_ENGINE_PARAMETER_SIGNATURE); - - // Treat the 'newValue' as if it contains not an actual IAC position, but an incremental delta. - // So we add this delta to the base IAC position, with a smooth taper for TPS transients. - newValue = engine->engineState.idle.baseIdlePosition + interpolateClamped(0.0f, newValue, CONFIGB(idlePidDeactivationTpsThreshold), 0.0f, tpsPos); - - // apply the PID limits - newValue = maxF(newValue, CONFIG(idleRpmPid.minValue)); - newValue = minF(newValue, CONFIG(idleRpmPid.maxValue)); -#endif /* EFI_IDLE_INCREMENTAL_PID_CIC */ + // if tps==0 then PID just works as usual, or we completely disable it if tps>=threshold + newValue = interpolateClamped(0.0f, newValue, CONFIGB(idlePidDeactivationTpsThreshold), engine->engineState.idle.baseIdlePosition, tpsPos); // Interpolate to the manual position when RPM is close to the upper RPM limit (if idlePidRpmUpperLimit is set). // If RPM increases and the throttle is closed, then we're in coasting mode, and we should smoothly disable auto-pid. @@ -348,8 +352,8 @@ static percent_t automaticIdleController(DECLARE_ENGINE_PARAMETER_SIGNATURE) { } engine->acSwitchState = result; } - if (CONFIGB(clutchUpPin) != GPIO_UNASSIGNED) { - engine->clutchUpState = efiReadPin(CONFIGB(clutchUpPin)); + if (CONFIG(clutchUpPin) != GPIO_UNASSIGNED) { + engine->clutchUpState = efiReadPin(CONFIG(clutchUpPin)); } if (CONFIG(throttlePedalUpPin) != GPIO_UNASSIGNED) { engine->engineState.idle.throttlePedalUpState = efiReadPin(CONFIG(throttlePedalUpPin)); @@ -451,6 +455,7 @@ IdleController idleControllerInstance; static void applyPidSettings(DECLARE_ENGINE_PARAMETER_SIGNATURE) { idlePid.updateFactors(engineConfiguration->idleRpmPid.pFactor, engineConfiguration->idleRpmPid.iFactor, engineConfiguration->idleRpmPid.dFactor); + iacPidMultMap.init(CONFIG(iacPidMultTable), CONFIG(iacPidMultLoadBins), CONFIG(iacPidMultRpmBins)); } void setDefaultIdleParameters(DECLARE_CONFIG_PARAMETER_SIGNATURE) { @@ -516,9 +521,9 @@ void startIdleBench(void) { static void applyIdleSolenoidPinState(int stateIndex, PwmConfig *state) /* pwm_gen_callback */ { efiAssertVoid(CUSTOM_ERR_6645, stateIndex < PWM_PHASE_MAX_COUNT, "invalid stateIndex"); - efiAssertVoid(CUSTOM_ERR_6646, state->multiWave.waveCount == 1, "invalid idle waveCount"); + efiAssertVoid(CUSTOM_ERR_6646, state->multiChannelStateSequence.waveCount == 1, "invalid idle waveCount"); OutputPin *output = state->outputPins[0]; - int value = state->multiWave.getChannelState(/*channelIndex*/0, stateIndex); + int value = state->multiChannelStateSequence.getChannelState(/*channelIndex*/0, stateIndex); if (!value /* always allow turning solenoid off */ || (GET_RPM_VALUE != 0 || timeToStopIdleTest != 0) /* do not run solenoid unless engine is spinning or bench testing in progress */ ) { @@ -539,6 +544,7 @@ bool isIdleHardwareRestartNeeded() { } void stopIdleHardware(DECLARE_ENGINE_PARAMETER_SIGNATURE) { +#if EFI_PROD_CODE brain_pin_markUnused(activeConfiguration.stepperEnablePin); brain_pin_markUnused(activeConfiguration.bc.idle.stepperStepPin); brain_pin_markUnused(activeConfiguration.bc.idle.solenoidPin); @@ -546,7 +552,7 @@ void stopIdleHardware(DECLARE_ENGINE_PARAMETER_SIGNATURE) { // brain_pin_markUnused(activeConfiguration.bc.idle.); // brain_pin_markUnused(activeConfiguration.bc.idle.); // brain_pin_markUnused(activeConfiguration.bc.idle.); - +#endif /* EFI_PROD_CODE */ } void initIdleHardware(DECLARE_ENGINE_PARAMETER_SIGNATURE) { @@ -577,7 +583,7 @@ void initIdleHardware(DECLARE_ENGINE_PARAMETER_SIGNATURE) { void startIdleThread(Logging*sharedLogger DECLARE_ENGINE_PARAMETER_SUFFIX) { logger = sharedLogger; - INJECT_ENGINE_REFERENCE(idleControllerInstance); + INJECT_ENGINE_REFERENCE(&idleControllerInstance); idlePid.initPidClass(&engineConfiguration->idleRpmPid); @@ -641,9 +647,9 @@ void startIdleThread(Logging*sharedLogger DECLARE_ENGINE_PARAMETER_SUFFIX) { getInputMode(CONFIGB(clutchDownPinMode))); } - if (CONFIGB(clutchUpPin) != GPIO_UNASSIGNED) { - efiSetPadMode("clutch up switch", CONFIGB(clutchUpPin), - getInputMode(CONFIGB(clutchUpPinMode))); + if (CONFIG(clutchUpPin) != GPIO_UNASSIGNED) { + efiSetPadMode("clutch up switch", CONFIG(clutchUpPin), + getInputMode(CONFIG(clutchUpPinMode))); } if (CONFIG(throttlePedalUpPin) != GPIO_UNASSIGNED) { diff --git a/firmware/controllers/actuators/pwm_tester.cpp b/firmware/controllers/actuators/pwm_tester.cpp index 463ba917de..c257bf7f74 100644 --- a/firmware/controllers/actuators/pwm_tester.cpp +++ b/firmware/controllers/actuators/pwm_tester.cpp @@ -11,7 +11,7 @@ #if EFI_PWM_TESTER #include "pwm_tester.h" -#include "efi_wave.h" +#include "state_requence.h" #include "pwm_generator_logic.h" #include "engine.h" #include "pwm_generator.h" diff --git a/firmware/controllers/algo/advance_map.cpp b/firmware/controllers/algo/advance_map.cpp index 67e97992e2..8da18d85c9 100644 --- a/firmware/controllers/algo/advance_map.cpp +++ b/firmware/controllers/algo/advance_map.cpp @@ -224,12 +224,12 @@ angle_t getAdvance(int rpm, float engineLoad DECLARE_ENGINE_PARAMETER_SUFFIX) { } void setDefaultIatTimingCorrection(DECLARE_ENGINE_PARAMETER_SIGNATURE) { - setLinearCurve(config->ignitionIatCorrLoadBins, IGN_LOAD_COUNT, /*from*/CLT_CURVE_RANGE_FROM, 110, 1); + setLinearCurve(config->ignitionIatCorrLoadBins, /*from*/CLT_CURVE_RANGE_FROM, 110, 1); #if IGN_LOAD_COUNT == DEFAULT_IGN_LOAD_COUNT memcpy(config->ignitionIatCorrRpmBins, iatTimingRpmBins, sizeof(iatTimingRpmBins)); copyTimingTable(defaultIatTiming, config->ignitionIatCorrTable); #else - setLinearCurve(config->ignitionIatCorrLoadBins, IGN_RPM_COUNT, /*from*/0, 6000, 1); + setLinearCurve(config->ignitionIatCorrLoadBins, /*from*/0, 6000, 1); #endif /* IGN_LOAD_COUNT == DEFAULT_IGN_LOAD_COUNT */ } diff --git a/firmware/controllers/algo/algo.mk b/firmware/controllers/algo/algo.mk index 5646200dda..e150fdcf32 100644 --- a/firmware/controllers/algo/algo.mk +++ b/firmware/controllers/algo/algo.mk @@ -8,6 +8,6 @@ CONTROLLERS_ALGO_SRC_CPP = $(PROJECT_DIR)/controllers/algo/advance_map.cpp \ $(PROJECT_DIR)/controllers/algo/engine_configuration.cpp \ $(PROJECT_DIR)/controllers/algo/engine.cpp \ $(PROJECT_DIR)/controllers/algo/engine2.cpp \ - $(PROJECT_DIR)/controllers/algo/lcd_menu_tree.cpp \ + $(PROJECT_DIR)/controllers/gauges/lcd_menu_tree.cpp \ $(PROJECT_DIR)/controllers/algo/event_registry.cpp \ $(PROJECT_DIR)/controllers/algo/algo.cpp \ diff --git a/firmware/controllers/algo/auto_generated_enums.cpp b/firmware/controllers/algo/auto_generated_enums.cpp index d923bd1e0d..9612068455 100644 --- a/firmware/controllers/algo/auto_generated_enums.cpp +++ b/firmware/controllers/algo/auto_generated_enums.cpp @@ -77,6 +77,12 @@ case EFI_ADC_ERROR: return "EFI_ADC_ERROR"; case EFI_ADC_NONE: return "EFI_ADC_NONE"; +#if EFI_UNIT_TEST +case TEST_MAF_CHANNEL: +case TEST_CLT_CHANNEL: +case TEST_IAT_CHANNEL: + return "EFI_TEST"; +#endif /* EFI_UNIT_TEST */ } return NULL; } @@ -769,6 +775,8 @@ case SACHS: return "SACHS"; case MRE_MIATA_NA6: return "MRE_MIATA_NA6"; +case PROTEUS: + return "PROTEUS"; case SUBARUEJ20G_DEFAULTS: return "SUBARUEJ20G_DEFAULTS"; case SUBARU_2003_WRX: @@ -999,6 +1007,8 @@ case SC_DETAILED_RPM: return "SC_DETAILED_RPM"; case SC_MAP: return "SC_MAP"; +case SC_AUX_FAST1: + return "SC_AUX_FAST1"; case SC_OFF: return "SC_OFF"; case SC_RPM_ACCEL: diff --git a/firmware/controllers/algo/engine.cpp b/firmware/controllers/algo/engine.cpp index 2f0e2c2c57..98c1ab7b2c 100644 --- a/firmware/controllers/algo/engine.cpp +++ b/firmware/controllers/algo/engine.cpp @@ -52,16 +52,16 @@ FsioState::FsioState() { #endif } -void Engine::eInitializeTriggerShape(Logging *logger DECLARE_ENGINE_PARAMETER_SUFFIX) { +void Engine::initializeTriggerWaveform(Logging *logger DECLARE_ENGINE_PARAMETER_SUFFIX) { #if EFI_ENGINE_CONTROL && EFI_SHAFT_POSITION_INPUT // we have a confusing threading model so some synchronization would not hurt bool alreadyLocked = lockAnyContext(); - TRIGGER_SHAPE(initializeTriggerShape(logger, + TRIGGER_WAVEFORM(initializeTriggerWaveform(logger, engineConfiguration->ambiguousOperationMode, engineConfiguration->useOnlyRisingEdgeForTrigger, &engineConfiguration->trigger)); - if (TRIGGER_SHAPE(bothFrontsRequired) && engineConfiguration->useOnlyRisingEdgeForTrigger) { + if (TRIGGER_WAVEFORM(bothFrontsRequired) && engineConfiguration->useOnlyRisingEdgeForTrigger) { #if EFI_PROD_CODE || EFI_SIMULATOR firmwareError(CUSTOM_ERR_BOTH_FRONTS_REQUIRED, "Inconsistent trigger setup"); #else @@ -70,9 +70,9 @@ void Engine::eInitializeTriggerShape(Logging *logger DECLARE_ENGINE_PARAMETER_SU } - if (!TRIGGER_SHAPE(shapeDefinitionError)) { + if (!TRIGGER_WAVEFORM(shapeDefinitionError)) { /** - * this instance is used only to initialize 'this' TriggerShape instance + * this instance is used only to initialize 'this' TriggerWaveform instance * #192 BUG real hardware trigger events could be coming even while we are initializing trigger */ initState.resetTriggerState(); @@ -82,14 +82,14 @@ void Engine::eInitializeTriggerShape(Logging *logger DECLARE_ENGINE_PARAMETER_SU if (engine->triggerCentral.triggerShape.getSize() == 0) { firmwareError(CUSTOM_ERR_TRIGGER_ZERO, "triggerShape size is zero"); } - engine->engineCycleEventCount = TRIGGER_SHAPE(getLength()); + engine->engineCycleEventCount = TRIGGER_WAVEFORM(getLength()); } if (!alreadyLocked) { unlockAnyContext(); } - if (!TRIGGER_SHAPE(shapeDefinitionError)) { + if (!TRIGGER_WAVEFORM(shapeDefinitionError)) { prepareOutputSignals(PASS_ENGINE_PARAMETER_SIGNATURE); } #endif /* EFI_ENGINE_CONTROL && EFI_SHAFT_POSITION_INPUT */ @@ -121,7 +121,9 @@ void Engine::periodicSlowCallback(DECLARE_ENGINE_PARAMETER_SIGNATURE) { #if EFI_FSIO runFsio(PASS_ENGINE_PARAMETER_SIGNATURE); -#endif /* EFI_PROD_CODE && EFI_FSIO */ +#else + runHardcodedFsio(PASS_ENGINE_PARAMETER_SIGNATURE); +#endif /* EFI_FSIO */ cylinderCleanupControl(PASS_ENGINE_PARAMETER_SIGNATURE); @@ -225,6 +227,19 @@ void Engine::preCalculate(DECLARE_ENGINE_PARAMETER_SIGNATURE) { #endif } +void Engine::OnTriggerStateDecodingError() { + Engine *engine = this; + EXPAND_Engine; + triggerCentral.triggerState.handleTriggerError(PASS_ENGINE_PARAMETER_SIGNATURE); +} + +void Engine::OnTriggerStateProperState(efitick_t nowNt) { + Engine *engine = this; + EXPAND_Engine; + rpmCalculator.setSpinningUp(nowNt PASS_ENGINE_PARAMETER_SUFFIX); +} + + void Engine::setConfig(persistent_config_s *config) { this->config = config; engineConfigurationPtr = &config->engineConfiguration; @@ -382,3 +397,22 @@ void doScheduleStopEngine(DECLARE_ENGINE_PARAMETER_SIGNATURE) { // let's close injectors or else if these happen to be open right now enginePins.stopPins(); } + +void action_s::setAction(schfunc_t callback, void *param) { + this->callback = callback; + this->param = param; +} + +void action_s::execute() { + efiAssertVoid(CUSTOM_ERR_ASSERT, callback != NULL, "callback==null1"); + callback(param); +} + +schfunc_t action_s::getCallback() const { + return callback; +} + +void * action_s::getArgument() const { + return param; +} + diff --git a/firmware/controllers/algo/engine.h b/firmware/controllers/algo/engine.h index c4ff7f42bf..0c4c26ff3e 100644 --- a/firmware/controllers/algo/engine.h +++ b/firmware/controllers/algo/engine.h @@ -45,10 +45,16 @@ class RpmCalculator; #define CLEANUP_MODE_TPS 90 #define STEPPER_PARKING_TPS CLEANUP_MODE_TPS -class Engine { +#define CYCLE_ALTERNATION 2 + +class Engine : public TriggerStateListener { public: explicit Engine(persistent_config_s *config); Engine(); + + void OnTriggerStateDecodingError() override; + void OnTriggerStateProperState(efitick_t nowNt) override; + void setConfig(persistent_config_s *config); injection_mode_e getCurrentInjectionMode(DECLARE_ENGINE_PARAMETER_SIGNATURE); @@ -56,6 +62,10 @@ public: LocalVersionHolder auxParametersVersion; operation_mode_e getOperationMode(DECLARE_ENGINE_PARAMETER_SIGNATURE); + AuxActor auxValves[AUX_DIGITAL_VALVE_COUNT][2]; + + bool needTdcCallback = true; + /** * By the way 32-bit value should hold at least 400 hours of events at 6K RPM x 12 events per revolution */ @@ -102,9 +112,11 @@ public: bool needToStopEngine(efitick_t nowNt) const; bool etbAutoTune = false; /** - * That's the linked list of pending spark firing events + * That's the linked list of pending events scheduled in relation to trigger + * At the moment we iterate over the whole list while looking for events for specific trigger index + * We can make it an array of lists per trigger index, but that would take some RAM and probably not needed yet. */ - IgnitionEvent *ignitionEventsHead = nullptr; + AngleBasedEvent *angleBasedEventsHead = nullptr; /** * this is based on isEngineChartEnabled and engineSnifferRpmThreshold settings */ @@ -132,9 +144,6 @@ public: // timestamp of most recent time RPM hard limit was triggered efitime_t rpmHardLimitTimestamp = 0; - // todo: should be a field on some other class, not Engine? - bool isInitializingTrigger = false; - /** * This flag indicated a big enough problem that engine control would be * prohibited if this flag is set to true. @@ -185,7 +194,7 @@ public: void periodicFastCallback(DECLARE_ENGINE_PARAMETER_SIGNATURE); void periodicSlowCallback(DECLARE_ENGINE_PARAMETER_SIGNATURE); void updateSlowSensors(DECLARE_ENGINE_PARAMETER_SIGNATURE); - void eInitializeTriggerShape(Logging *logger DECLARE_ENGINE_PARAMETER_SUFFIX); + void initializeTriggerWaveform(Logging *logger DECLARE_ENGINE_PARAMETER_SUFFIX); bool clutchUpState = false; bool clutchDownState = false; diff --git a/firmware/controllers/algo/engine2.cpp b/firmware/controllers/algo/engine2.cpp index 3e9bf728a9..8ef3bcd6bf 100644 --- a/firmware/controllers/algo/engine2.cpp +++ b/firmware/controllers/algo/engine2.cpp @@ -145,7 +145,7 @@ void EngineState::periodicFastCallback(DECLARE_ENGINE_PARAMETER_SIGNATURE) { #if EFI_ENGINE_CONTROL if (!engine->slowCallBackWasInvoked) { - warning(CUSTOM_ERR_6696, "Slow not invoked yet"); + warning(CUSTOM_SLOW_NOT_INVOKED, "Slow not invoked yet"); } efitick_t nowNt = getTimeNowNt(); if (ENGINE(rpmCalculator).isCranking(PASS_ENGINE_PARAMETER_SIGNATURE)) { diff --git a/firmware/controllers/algo/engine_configuration.cpp b/firmware/controllers/algo/engine_configuration.cpp index 5d15bf81ce..6269268700 100644 --- a/firmware/controllers/algo/engine_configuration.cpp +++ b/firmware/controllers/algo/engine_configuration.cpp @@ -143,6 +143,8 @@ static fuel_table_t alphaNfuel = { */ #ifdef EFI_ACTIVE_CONFIGURATION_IN_FLASH engine_configuration_s & activeConfiguration = *(engine_configuration_s *)EFI_ACTIVE_CONFIGURATION_IN_FLASH; +// we cannot use this activeConfiguration until we call rememberCurrentConfiguration() +bool isActiveConfigurationVoid = true; #else static engine_configuration_s activeConfigurationLocalStorage; engine_configuration_s & activeConfiguration = activeConfigurationLocalStorage; @@ -153,6 +155,8 @@ extern engine_configuration_s *engineConfiguration; void rememberCurrentConfiguration(DECLARE_ENGINE_PARAMETER_SIGNATURE) { #ifndef EFI_ACTIVE_CONFIGURATION_IN_FLASH memcpy(&activeConfiguration, engineConfiguration, sizeof(engine_configuration_s)); +#else + isActiveConfigurationVoid = false; #endif /* EFI_ACTIVE_CONFIGURATION_IN_FLASH */ } @@ -208,7 +212,7 @@ void setConstantDwell(floatms_t dwellMs DECLARE_CONFIG_PARAMETER_SUFFIX) { for (int i = 0; i < DWELL_CURVE_SIZE; i++) { engineConfiguration->sparkDwellRpmBins[i] = 1000 * i; } - setLinearCurve(engineConfiguration->sparkDwellValues, DWELL_CURVE_SIZE, dwellMs, dwellMs, 0.01); + setLinearCurve(engineConfiguration->sparkDwellValues, dwellMs, dwellMs, 0.01); } void setAfrMap(afr_table_t table, float value) { @@ -248,9 +252,9 @@ void setWholeIgnitionIatCorr(float value DECLARE_CONFIG_PARAMETER_SUFFIX) { } void setFuelTablesLoadBin(float minValue, float maxValue DECLARE_CONFIG_PARAMETER_SUFFIX) { - setLinearCurve(config->injPhaseLoadBins, FUEL_LOAD_COUNT, minValue, maxValue, 1); - setLinearCurve(config->veLoadBins, FUEL_LOAD_COUNT, minValue, maxValue, 1); - setLinearCurve(config->afrLoadBins, FUEL_LOAD_COUNT, minValue, maxValue, 1); + setLinearCurve(config->injPhaseLoadBins, minValue, maxValue, 1); + setLinearCurve(config->veLoadBins, minValue, maxValue, 1); + setLinearCurve(config->afrLoadBins, minValue, maxValue, 1); } void setTimingMap(ignition_table_t map, float value) { @@ -304,6 +308,11 @@ void prepareVoidConfiguration(engine_configuration_s *engineConfiguration) { engineConfiguration->vbattAdcChannel = EFI_ADC_NONE; engineConfiguration->map.sensor.hwChannel = EFI_ADC_NONE; engineConfiguration->mafAdcChannel = EFI_ADC_NONE; +/* this breaks unit tests lovely TODO: fix this? + engineConfiguration->tps1_1AdcChannel = EFI_ADC_NONE; +*/ + engineConfiguration->tps2_1AdcChannel = EFI_ADC_NONE; + engineConfiguration->bc.auxFastSensor1_adcChannel = EFI_ADC_NONE; engineConfiguration->acSwitchAdc = EFI_ADC_NONE; engineConfiguration->externalKnockSenseAdc = EFI_ADC_NONE; engineConfiguration->fuelLevelSensor = EFI_ADC_NONE; @@ -313,7 +322,7 @@ void prepareVoidConfiguration(engine_configuration_s *engineConfiguration) { engineConfiguration->high_fuel_pressure_sensor_2 = EFI_ADC_NONE; boardConfiguration->clutchDownPinMode = PI_PULLUP; - boardConfiguration->clutchUpPinMode = PI_PULLUP; + engineConfiguration->clutchUpPinMode = PI_PULLUP; engineConfiguration->brakePedalPinMode = PI_PULLUP; } @@ -450,11 +459,11 @@ static void setDefaultFuelCutParameters(DECLARE_ENGINE_PARAMETER_SIGNATURE) { static void setDefaultCrankingSettings(DECLARE_ENGINE_PARAMETER_SIGNATURE) { CONFIG(useTLE8888_cranking_hack) = true; - setLinearCurve(engineConfiguration->crankingTpsCoef, CRANKING_CURVE_SIZE, /*from*/1, /*to*/1, 1); - setLinearCurve(engineConfiguration->crankingTpsBins, CRANKING_CURVE_SIZE, 0, 100, 1); + setLinearCurve(engineConfiguration->crankingTpsCoef, /*from*/1, /*to*/1, 1); + setLinearCurve(engineConfiguration->crankingTpsBins, 0, 100, 1); - setLinearCurve(config->cltCrankingCorrBins, CLT_CRANKING_CURVE_SIZE, CLT_CURVE_RANGE_FROM, 100, 1); - setLinearCurve(config->cltCrankingCorr, CLT_CRANKING_CURVE_SIZE, 1.0, 1.0, 1); + setLinearCurve(config->cltCrankingCorrBins, CLT_CURVE_RANGE_FROM, 100, 1); + setLinearCurve(config->cltCrankingCorr, 1.0, 1.0, 1); config->crankingFuelCoef[0] = 2.8; // base cranking fuel adjustment coefficient config->crankingFuelBins[0] = -20; // temperature in C @@ -510,7 +519,7 @@ static void setDefaultCrankingSettings(DECLARE_ENGINE_PARAMETER_SIGNATURE) { * see also setTargetRpmCurve() */ static void setDefaultIdleSpeedTarget(DECLARE_ENGINE_PARAMETER_SIGNATURE) { - setLinearCurve(engineConfiguration->cltIdleRpmBins, CLT_CURVE_SIZE, CLT_CURVE_RANGE_FROM, 140, 10); + setLinearCurve(engineConfiguration->cltIdleRpmBins, CLT_CURVE_RANGE_FROM, 140, 10); setCurveValue(engineConfiguration->cltIdleRpmBins, engineConfiguration->cltIdleRpm, CLT_CURVE_SIZE, -30, 1350); setCurveValue(engineConfiguration->cltIdleRpmBins, engineConfiguration->cltIdleRpm, CLT_CURVE_SIZE, -20, 1300); @@ -548,8 +557,8 @@ static void setCanFrankensoDefaults(DECLARE_CONFIG_PARAMETER_SIGNATURE) { * see also setDefaultIdleSpeedTarget() */ void setTargetRpmCurve(int rpm DECLARE_CONFIG_PARAMETER_SUFFIX) { - setLinearCurve(engineConfiguration->cltIdleRpmBins, CLT_CURVE_SIZE, CLT_CURVE_RANGE_FROM, 90, 10); - setLinearCurve(engineConfiguration->cltIdleRpm, CLT_CURVE_SIZE, rpm, rpm, 10); + setLinearCurve(engineConfiguration->cltIdleRpmBins, CLT_CURVE_RANGE_FROM, 90, 10); + setLinearCurve(engineConfiguration->cltIdleRpm, rpm, rpm, 10); } int getTargetRpmForIdleCorrection(DECLARE_ENGINE_PARAMETER_SIGNATURE) { @@ -600,7 +609,7 @@ static void setDefaultEngineConfiguration(DECLARE_ENGINE_PARAMETER_SIGNATURE) { setDefaultEtbBiasCurve(PASS_CONFIG_PARAMETER_SIGNATURE); #endif /* EFI_ELECTRONIC_THROTTLE_BODY */ - CONFIGB(mafSensorType) = Bosch0280218037; + CONFIG(mafSensorType) = Bosch0280218037; setBosch0280218037(config); setBosch02880155868(PASS_ENGINE_PARAMETER_SIGNATURE); @@ -639,17 +648,17 @@ static void setDefaultEngineConfiguration(DECLARE_ENGINE_PARAMETER_SIGNATURE) { engineConfiguration->alternatorControl.minValue = 10; engineConfiguration->alternatorControl.maxValue = 90; - setLinearCurve(engineConfiguration->cltTimingBins, CLT_TIMING_CURVE_SIZE, CLT_CURVE_RANGE_FROM, 120, 1); - setLinearCurve(engineConfiguration->cltTimingExtra, CLT_TIMING_CURVE_SIZE, 0, 0, 1); + setLinearCurve(engineConfiguration->cltTimingBins, CLT_CURVE_RANGE_FROM, 120, 1); + setLinearCurve(engineConfiguration->cltTimingExtra, 0, 0, 1); - setLinearCurve(engineConfiguration->fsioCurve1Bins, FSIO_CURVE_16, 0, 100, 1); - setLinearCurve(engineConfiguration->fsioCurve1, FSIO_CURVE_16, 0, 100, 1); + setLinearCurve(engineConfiguration->fsioCurve1Bins, 0, 100, 1); + setLinearCurve(engineConfiguration->fsioCurve1, 0, 100, 1); - setLinearCurve(engineConfiguration->fsioCurve2Bins, FSIO_CURVE_16, 0, 100, 1); - setLinearCurve(engineConfiguration->fsioCurve2, FSIO_CURVE_16, 30, 170, 1); + setLinearCurve(engineConfiguration->fsioCurve2Bins, 0, 100, 1); + setLinearCurve(engineConfiguration->fsioCurve2, 30, 170, 1); - setLinearCurve(engineConfiguration->fsioCurve3Bins, FSIO_CURVE_8, 0, 100, 1); - setLinearCurve(engineConfiguration->fsioCurve4Bins, FSIO_CURVE_8, 0, 100, 1); + setLinearCurve(engineConfiguration->fsioCurve3Bins, 0, 100, 1); + setLinearCurve(engineConfiguration->fsioCurve4Bins, 0, 100, 1); setDefaultWarmupIdleCorrection(PASS_CONFIG_PARAMETER_SIGNATURE); @@ -677,10 +686,10 @@ static void setDefaultEngineConfiguration(DECLARE_ENGINE_PARAMETER_SIGNATURE) { setTimingLoadBin(1.2, 4.4 PASS_CONFIG_PARAMETER_SUFFIX); setTimingRpmBin(800, 7000 PASS_CONFIG_PARAMETER_SUFFIX); - setLinearCurve(engineConfiguration->map.samplingAngleBins, MAP_ANGLE_SIZE, 800, 7000, 1); - setLinearCurve(engineConfiguration->map.samplingAngle, MAP_ANGLE_SIZE, 100, 130, 1); - setLinearCurve(engineConfiguration->map.samplingWindowBins, MAP_ANGLE_SIZE, 800, 7000, 1); - setLinearCurve(engineConfiguration->map.samplingWindow, MAP_ANGLE_SIZE, 50, 50, 1); + setLinearCurve(engineConfiguration->map.samplingAngleBins, 800, 7000, 1); + setLinearCurve(engineConfiguration->map.samplingAngle, 100, 130, 1); + setLinearCurve(engineConfiguration->map.samplingWindowBins, 800, 7000, 1); + setLinearCurve(engineConfiguration->map.samplingWindow, 50, 50, 1); // set_whole_timing_map 3 setWholeFuelMap(3 PASS_CONFIG_PARAMETER_SUFFIX); @@ -696,19 +705,19 @@ static void setDefaultEngineConfiguration(DECLARE_ENGINE_PARAMETER_SIGNATURE) { setFuelTablesLoadBin(10, 160 PASS_CONFIG_PARAMETER_SUFFIX); setDefaultIatTimingCorrection(PASS_ENGINE_PARAMETER_SIGNATURE); - setLinearCurve(engineConfiguration->mapAccelTaperBins, FSIO_TABLE_8, 0, 32, 4); - setLinearCurve(engineConfiguration->mapAccelTaperMult, FSIO_TABLE_8, 1, 1, 1); + setLinearCurve(engineConfiguration->mapAccelTaperBins, 0, 32, 4); + setLinearCurve(engineConfiguration->mapAccelTaperMult, 1, 1, 1); - setLinearCurve(config->tpsTpsAccelFromRpmBins, FSIO_TABLE_8, 0, 100, 10); - setLinearCurve(config->tpsTpsAccelToRpmBins, FSIO_TABLE_8, 0, 100, 10); + setLinearCurve(config->tpsTpsAccelFromRpmBins, 0, 100, 10); + setLinearCurve(config->tpsTpsAccelToRpmBins, 0, 100, 10); - setLinearCurve(config->fsioTable1LoadBins, FSIO_TABLE_8, 20, 120, 10); + setLinearCurve(config->fsioTable1LoadBins, 20, 120, 10); setRpmTableBin(config->fsioTable1RpmBins, FSIO_TABLE_8); - setLinearCurve(config->fsioTable2LoadBins, FSIO_TABLE_8, 20, 120, 10); + setLinearCurve(config->fsioTable2LoadBins, 20, 120, 10); setRpmTableBin(config->fsioTable2RpmBins, FSIO_TABLE_8); - setLinearCurve(config->fsioTable3LoadBins, FSIO_TABLE_8, 20, 120, 10); + setLinearCurve(config->fsioTable3LoadBins, 20, 120, 10); setRpmTableBin(config->fsioTable3RpmBins, FSIO_TABLE_8); - setLinearCurve(config->fsioTable4LoadBins, FSIO_TABLE_8, 20, 120, 10); + setLinearCurve(config->fsioTable4LoadBins, 20, 120, 10); setRpmTableBin(config->fsioTable4RpmBins, FSIO_TABLE_8); initEngineNoiseTable(PASS_ENGINE_PARAMETER_SIGNATURE); @@ -1103,7 +1112,7 @@ void resetConfigurationExt(Logging * logger, configuration_callback_t boardCallb #endif /* EFI_SUPPORT_FORD_FIESTA */ #if EFI_SUPPORT_NISSAN_PRIMERA case NISSAN_PRIMERA: - setNissanPrimeraEngineConfiguration(engineConfiguration); + setNissanPrimeraEngineConfiguration(PASS_CONFIG_PARAMETER_SIGNATURE); break; #endif case HONDA_ACCORD_CD: @@ -1122,6 +1131,7 @@ void resetConfigurationExt(Logging * logger, configuration_callback_t boardCallb setEtbTestConfiguration(PASS_CONFIG_PARAMETER_SIGNATURE); break; case MICRO_RUS_EFI: + case PROTEUS: // nothing to do - we do it all in setBoardConfigurationOverrides break; case TLE8888_BENCH_ENGINE: @@ -1163,7 +1173,7 @@ void resetConfigurationExt(Logging * logger, configuration_callback_t boardCallb setMazdaMiataNb1EngineConfiguration(PASS_CONFIG_PARAMETER_SIGNATURE); break; case MAZDA_323: - setMazda323EngineConfiguration(engineConfiguration); + setMazda323EngineConfiguration(PASS_CONFIG_PARAMETER_SIGNATURE); break; case MAZDA_626: setMazda626EngineConfiguration(PASS_CONFIG_PARAMETER_SIGNATURE); @@ -1286,7 +1296,7 @@ void applyNonPersistentConfiguration(Logging * logger DECLARE_ENGINE_PARAMETER_S assertEngineReference(); #if EFI_ENGINE_CONTROL - ENGINE(eInitializeTriggerShape(logger PASS_ENGINE_PARAMETER_SUFFIX)); + ENGINE(initializeTriggerWaveform(logger PASS_ENGINE_PARAMETER_SUFFIX)); #endif #if EFI_FSIO diff --git a/firmware/controllers/algo/engine_state.h b/firmware/controllers/algo/engine_state.h index aa6af6ceac..13082dacdd 100644 --- a/firmware/controllers/algo/engine_state.h +++ b/firmware/controllers/algo/engine_state.h @@ -55,6 +55,9 @@ public: angle_t mapAveragingStart[INJECTION_PIN_COUNT]; angle_t mapAveragingDuration = 0; + /** + * timing advance is angle distance before Top Dead Center (TDP), i.e. "10 degree timing advance" means "happens 10 degrees before TDC" + */ angle_t timingAdvance = 0; // fuel-related; float fuelCutoffCorrection = 0; diff --git a/firmware/controllers/algo/event_registry.cpp b/firmware/controllers/algo/event_registry.cpp index c9887a78b2..a1ca5d3a40 100644 --- a/firmware/controllers/algo/event_registry.cpp +++ b/firmware/controllers/algo/event_registry.cpp @@ -38,12 +38,3 @@ IgnitionOutputPin * IgnitionEvent::getOutputForLoggins() { return outputs[0]; } - -//void registerActuatorEventWhat(InjectionEventList *list, int eventIndex, OutputSignal *actuator, float angleOffset) { -// ActuatorEvent *e = list->getNextActuatorEvent(); -// if (e == NULL) -// return; // error already reported -// e->position.eventIndex = eventIndex; -// e->actuator = actuator; -// e->position.angleOffset = angleOffset; -//} diff --git a/firmware/controllers/algo/event_registry.h b/firmware/controllers/algo/event_registry.h index bf8640f167..78987c5607 100644 --- a/firmware/controllers/algo/event_registry.h +++ b/firmware/controllers/algo/event_registry.h @@ -28,9 +28,7 @@ public: bool isSimultanious; InjectorOutputPin *outputs[MAX_WIRES_COUNT]; int ownIndex; -#if EFI_UNIT_TEST - Engine *engine; -#endif + DECLARE_ENGINE_PTR; event_trigger_position_s injectionStart; scheduling_s signalTimerUp; @@ -69,6 +67,17 @@ private: void clear(); }; +class AngleBasedEvent { +public: + scheduling_s scheduling; + event_trigger_position_s position; + action_s action; + /** + * Trigger-based scheduler maintains a linked list of all pending tooth-based events. + */ + AngleBasedEvent *nextToothEvent = nullptr; +}; + #define MAX_OUTPUTS_FOR_IGNITION 2 class IgnitionEvent { @@ -76,22 +85,17 @@ public: IgnitionEvent(); IgnitionOutputPin *outputs[MAX_OUTPUTS_FOR_IGNITION]; scheduling_s dwellStartTimer; - scheduling_s signalTimerDown; + AngleBasedEvent sparkEvent; /** * Desired timing advance */ - angle_t advance = NAN; + angle_t sparkAngle = NAN; floatms_t sparkDwell; /** * this timestamp allows us to measure actual dwell time */ uint32_t actualStartOfDwellNt; event_trigger_position_s dwellPosition; - event_trigger_position_s sparkPosition; - /** - * Ignition scheduler maintains a linked list of all pending ignition events. - */ - IgnitionEvent *next = nullptr; /** * Sequential number of currently processed spark event * @see globalSparkIdCounter @@ -102,9 +106,7 @@ public: */ int cylinderIndex = 0; char *name = nullptr; -#if EFI_UNIT_TEST - Engine *engine; -#endif + DECLARE_ENGINE_PTR; IgnitionOutputPin *getOutputForLoggins(); }; @@ -118,3 +120,14 @@ public: IgnitionEvent elements[MAX_IGNITION_EVENT_COUNT]; bool isReady = false; }; + +class AuxActor { +public: + int phaseIndex; + int valveIndex; + angle_t extra; + + AngleBasedEvent open; + AngleBasedEvent close; + DECLARE_ENGINE_PTR; +}; diff --git a/firmware/controllers/algo/firing_order.h b/firmware/controllers/algo/firing_order.h index 70c0771ab0..9c7cbba3a9 100644 --- a/firmware/controllers/algo/firing_order.h +++ b/firmware/controllers/algo/firing_order.h @@ -1,15 +1,15 @@ /* * @file firing_order.h * + * See also FiringOrderTSLogic.java + * * @date Jul 20, 2016 - * @author Andrey Belomutskiy, (c) 2012-2017 + * @author Andrey Belomutskiy, (c) 2012-2019 */ #include "rusefi_enums.h" - -#ifndef CONTROLLERS_ALGO_FIRING_ORDER_H_ -#define CONTROLLERS_ALGO_FIRING_ORDER_H_ +#pragma once typedef enum { FO_1 = 0, @@ -53,6 +53,3 @@ typedef enum { Force_4b_firing_order = ENUM_32_BITS, } firing_order_e; - - -#endif /* CONTROLLERS_ALGO_FIRING_ORDER_H_ */ diff --git a/firmware/controllers/algo/obd_error_codes.h b/firmware/controllers/algo/obd_error_codes.h index 5c76927fab..a74417f997 100644 --- a/firmware/controllers/algo/obd_error_codes.h +++ b/firmware/controllers/algo/obd_error_codes.h @@ -1831,7 +1831,7 @@ typedef enum { CUSTOM_ERR_PIN_ALREADY_USED_2 = 6134, CUSTOM_ERR_ICU_STATE = 6135, CUSTOM_ERR_TCHARGE_NOT_READY = 6136, - CUSTOM_ERR_TRIGGER_SHAPE_TOO_LONG = 6137, + CUSTOM_ERR_TRIGGER_WAVEFORM_TOO_LONG = 6137, CUSTOM_ERR_FUEL_TABLE_NOT_READY = 6138, CUSTOM_ERR_TCHARGE_NOT_READY2 = 6139, @@ -1938,8 +1938,8 @@ typedef enum { CUSTOM_ERR_6585 = 6585, CUSTOM_ERR_6586 = 6586, CUSTOM_ERR_6587 = 6587, - CUSTOM_ERR_6588 = 6588, - CUSTOM_ERR_6589 = 6589, + CUSTOM_NULL_SHAPE = 6588, + CUSTOM_SPARK_ANGLE_1 = 6589, CUSTOM_ERR_6590 = 6590, CUSTOM_ERR_6591 = 6591, @@ -2026,14 +2026,14 @@ typedef enum { CUSTOM_ERR_6665 = 6665, CUSTOM_ERR_6666 = 6666, CUSTOM_ERR_ADCANCE_CALC_ANGLE = 6667, - CUSTOM_ERR_6668 = 6668, + CUSTOM_ERR_ETB_TARGET = 6668, CUSTOM_ERR_6669 = 6669, CUSTOM_ERR_6670 = 6670, - CUSTOM_ERR_6671 = 6671, - CUSTOM_ERR_6672 = 6672, - CUSTOM_ERR_6673 = 6673, - CUSTOM_ERR_6674 = 6674, + CUSTOM_STACK_ADC_6671 = 6671, + CUSTOM_ICU_DRIVER = 6672, + CUSTOM_ICU_DRIVER_STATE = 6673, + CUSTOM_STACK_SPI = 6674, CUSTOM_ERR_6675 = 6675, CUSTOM_ERR_6676 = 6676, CUSTOM_IH_STACK = 6677, @@ -2049,16 +2049,16 @@ typedef enum { CUSTOM_ERR_6686 = 6686, CUSTOM_ERR_6687 = 6687, CUSTOM_ERR_6688 = 6688, - CUSTOM_ERR_6689 = 6689, + CUSTOM_SPARK_ANGLE_9 = 6689, CUSTOM_ERR_MAP_START_ASSERT = 6690, CUSTOM_ERR_MAP_AVG_OFFSET = 6691, CUSTOM_ERR_MAP_CYL_OFFSET = 6692, CUSTOM_ERR_PWM_DUTY_ASSERT = 6693, CUSTOM_ERR_ZERO_CRANKING_FUEL = 6694, - CUSTOM_ERR_6695 = 6695, - CUSTOM_ERR_6696 = 6696, - CUSTOM_ERR_6697 = 6697, + CUSTOM_NULL_EXECUTOR = 6695, + CUSTOM_SLOW_NOT_INVOKED = 6696, + CUSTOM_PWM_CYCLE_START = 6697, CUSTOM_ERR_ARRAY_IS_FULL = 6698, CUSTOM_ERR_ARRAY_REMOVE_ERROR = 6699, CUSTOM_ERR_INVALID_INPUT_ICU_PIN = 6700, @@ -2069,7 +2069,7 @@ typedef enum { CUSTOM_ERR_6703 = 6703, CUSTOM_ERR_BOTH_FRONTS_REQUIRED = 6704, CUSTOM_TLE8888 = 6705, - CUSTOM_ERR_6706 = 6706, + CUSTOM_KNOCK_WINDOW = 6706, CUSTOM_ERR_TIMER_TEST_CALLBACK_NOT_HAPPENED = 6707, CUSTOM_ERR_TIMER_TEST_CALLBACK_WRONG_TIME = 6708, CUSTOM_ERR_6709 = 6709, @@ -2080,8 +2080,20 @@ typedef enum { CUSTOM_ERR_PWM_SWITCH_ASSERT = 6714, + CUSTOM_INVALID_ADC = 6720, + CUSTOM_ERR_6721 = 6721, + CUSTOM_ERR_6722 = 6722, + CUSTOM_ERR_6723 = 6723, + CUSTOM_ERR_6724 = 6724, + CUSTOM_ERR_6725 = 6725, + CUSTOM_ERR_6726 = 6726, + CUSTOM_ERR_6727 = 6727, + CUSTOM_ERR_6728 = 6728, + CUSTOM_ERR_6729 = 6729, + + CUSTOM_ERR_TRIGGER_SYNC = 9000, - CUSTOM_OBD_TRIGGER_SHAPE = 9001, + CUSTOM_OBD_TRIGGER_WAVEFORM = 9001, /** * This is not engine miss detection - this is only internal scheduler state validation * Should not happen diff --git a/firmware/controllers/algo/rusefi_enums.h b/firmware/controllers/algo/rusefi_enums.h index 8f071f8f09..8d913fa55e 100644 --- a/firmware/controllers/algo/rusefi_enums.h +++ b/firmware/controllers/algo/rusefi_enums.h @@ -103,7 +103,7 @@ typedef enum { // used by unit test // see https://github.com/rusefi/rusefi/issues/898 - // see TriggerShape::bothFrontsRequired + // see TriggerWaveform::bothFrontsRequired ISSUE_898 = 27, MAZDA_626 = 28, @@ -187,6 +187,8 @@ typedef enum { MICRO_RUS_EFI = 60, + PROTEUS = 61, + /** * this configuration has as few pins configured as possible */ @@ -719,6 +721,7 @@ typedef enum { SC_MAP = 2, SC_RPM_ACCEL = 3, SC_DETAILED_RPM = 4, + SC_AUX_FAST1 = 5, Internal_ForceMyEnumIntSize_sensor_chart = ENUM_32_BITS, } sensor_chart_e; diff --git a/firmware/controllers/algo/rusefi_types.h b/firmware/controllers/algo/rusefi_types.h index 0bb964ff28..41c23f8693 100644 --- a/firmware/controllers/algo/rusefi_types.h +++ b/firmware/controllers/algo/rusefi_types.h @@ -4,8 +4,8 @@ * @date Jan 12, 2015 * @author Andrey Belomutskiy, (c) 2012-2017 */ -#ifndef CONTROLLERS_ALGO_RUSEFI_TYPES_H_ -#define CONTROLLERS_ALGO_RUSEFI_TYPES_H_ + +#pragma once #include #include @@ -90,7 +90,6 @@ typedef uint8_t iac_pid_mult_t[IAC_PID_MULT_SIZE][IAC_PID_MULT_SIZE]; typedef float baro_corr_table_t[BARO_CORR_SIZE][BARO_CORR_SIZE]; typedef float fsio_table_8x8_f32t[FSIO_TABLE_8][FSIO_TABLE_8]; -typedef uint8_t fsio_table_8x8_u8t[FSIO_TABLE_8][FSIO_TABLE_8]; typedef float tps_tps_table_t[TPS_TPS_ACCEL_TABLE][TPS_TPS_ACCEL_TABLE]; typedef uint8_t fsio_table_8x8_u8t[FSIO_TABLE_8][FSIO_TABLE_8]; @@ -131,5 +130,3 @@ typedef void (*VoidCharPtrCharPtrVoidPtr)(const char *, const char *, void*); typedef void (*VoidCharPtrCharPtrCharPtr)(const char *, const char *, const char *); typedef void (*VoidCharPtrCharPtrCharPtrCharPtrCharPtr)(const char *, const char *, const char *, const char *, const char *); - -#endif /* CONTROLLERS_ALGO_RUSEFI_TYPES_H_ */ diff --git a/firmware/controllers/controllers.mk b/firmware/controllers/controllers.mk index 8a3c4688b4..56783f376a 100644 --- a/firmware/controllers/controllers.mk +++ b/firmware/controllers/controllers.mk @@ -1,3 +1,11 @@ +include $(PROJECT_DIR)/controllers/algo/algo.mk +include $(PROJECT_DIR)/controllers/core/core.mk +include $(PROJECT_DIR)/controllers/math/math.mk +include $(PROJECT_DIR)/controllers/trigger/trigger.mk +include $(PROJECT_DIR)/controllers/sensors/sensors.mk +include $(PROJECT_DIR)/controllers/system/system.mk +#include $(PROJECT_DIR)/controllers/gauges/gauges.mk + CONTROLLERS_DIR=$(PROJECT_DIR)/controllers CONTROLLERSSRC = @@ -5,34 +13,42 @@ CONTROLLERSSRC = CONTROLLERS_SRC_CPP = \ $(CONTROLLERS_DIR)/actuators/electronic_throttle.cpp \ $(CONTROLLERS_DIR)/actuators/alternator_controller.cpp \ - $(CONTROLLERS_DIR)/actuators/malfunction_indicator.cpp \ - $(CONTROLLERS_DIR)/actuators/tachometer.cpp \ $(CONTROLLERS_DIR)/actuators/idle_thread.cpp \ $(CONTROLLERS_DIR)/actuators/pwm_tester.cpp \ $(CONTROLLERS_DIR)/actuators/algo/aux_pid.cpp \ - $(CONTROLLERS_DIR)/actuators/lcd_controller.cpp \ - $(CONTROLLERS_DIR)/scheduling/signal_executor_sleep.cpp \ - $(CONTROLLERS_DIR)/scheduling/single_timer_executor.cpp \ - $(CONTROLLERS_DIR)/scheduling/pwm_generator_logic.cpp \ - $(CONTROLLERS_DIR)/scheduling/event_queue.cpp \ - $(PROJECT_DIR)/controllers/settings.cpp \ - $(PROJECT_DIR)/controllers/core/error_handling.cpp \ - $(PROJECT_DIR)/controllers/map_averaging.cpp \ - $(PROJECT_DIR)/controllers/flash_main.cpp \ - $(PROJECT_DIR)/controllers/injector_central.cpp \ - $(PROJECT_DIR)/controllers/obd2.cpp \ - $(PROJECT_DIR)/controllers/engine_controller.cpp \ - $(PROJECT_DIR)/controllers/persistent_store.cpp \ + $(CONTROLLERS_DIR)/gauges/tachometer.cpp \ + $(CONTROLLERS_DIR)/gauges/malfunction_indicator.cpp \ + $(CONTROLLERS_DIR)/gauges/lcd_controller.cpp \ + $(CONTROLLERS_DIR)/system/timer/signal_executor_sleep.cpp \ + $(CONTROLLERS_DIR)/system/timer/single_timer_executor.cpp \ + $(CONTROLLERS_DIR)/system/timer/pwm_generator_logic.cpp \ + $(CONTROLLERS_DIR)/system/timer/event_queue.cpp \ + $(CONTROLLERS_DIR)/settings.cpp \ + $(CONTROLLERS_DIR)/core/error_handling.cpp \ + $(CONTROLLERS_DIR)/engine_cycle/map_averaging.cpp \ + $(CONTROLLERS_DIR)/engine_cycle/rpm_calculator.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)/flash_main.cpp \ + $(CONTROLLERS_DIR)/injector_central.cpp \ + $(CONTROLLERS_DIR)/obd2.cpp \ + $(CONTROLLERS_DIR)/engine_controller.cpp \ + $(CONTROLLERS_DIR)/persistent_store.cpp \ CONTROLLERS_INC=\ $(CONTROLLERS_DIR) \ - $(CONTROLLERS_DIR)/scheduling \ $(CONTROLLERS_DIR)/system \ + $(CONTROLLERS_DIR)/system/timer \ $(CONTROLLERS_DIR)/algo \ + $(CONTROLLERS_DIR)/engine_cycle \ $(CONTROLLERS_DIR)/trigger/decoders \ $(CONTROLLERS_DIR)/trigger \ + $(CONTROLLERS_DIR)/sensors \ + $(CONTROLLERS_DIR)/sensors/converters \ $(CONTROLLERS_DIR)/core \ + $(CONTROLLERS_DIR)/gauges \ $(CONTROLLERS_DIR)/math \ $(CONTROLLERS_DIR)/generated \ $(CONTROLLERS_DIR)/actuators \ diff --git a/firmware/controllers/core/common_headers.h b/firmware/controllers/core/common_headers.h index aa1b846cb0..aa0056ac64 100644 --- a/firmware/controllers/core/common_headers.h +++ b/firmware/controllers/core/common_headers.h @@ -72,17 +72,28 @@ board_configuration_s *boardConfiguration = nullptr; -#define INJECT_ENGINE_REFERENCE(x) \ - x.engine = engine; \ - x.engineConfiguration = engineConfiguration; \ - x.config = config; \ - x.boardConfiguration = boardConfiguration; +#define INJECT_ENGINE_REFERENCE(x) \ + (x)->engine = engine; \ + (x)->engineConfiguration = engineConfiguration; \ + (x)->config = config; \ + (x)->boardConfiguration = boardConfiguration; #define EXPAND_Engine \ engine_configuration_s *engineConfiguration = engine->engineConfigurationPtr; \ persistent_config_s *config = engine->config; \ board_configuration_s *boardConfiguration = &engineConfiguration->bc; +#ifndef EFI_ACTIVE_CONFIGURATION_IN_FLASH +// We store a special changeable copy of configuration is RAM, so we can just compare them #define isConfigurationChanged(x) (engineConfiguration->x != activeConfiguration.x) +#else +// We cannot call prepareVoidConfiguration() for activeConfiguration if it's stored in flash, +// so we need to tell the firmware that it's "void" (i.e. zeroed, invalid) by setting a special flag variable, +// and then we consider 'x' as changed if it's just non-zero. +extern bool isActiveConfigurationVoid; +#define isConfigurationChanged(x) ((engineConfiguration->x != activeConfiguration.x) || (isActiveConfigurationVoid && engineConfiguration->x != 0)) +#endif /* EFI_ACTIVE_CONFIGURATION_IN_FLASH */ + +#define isPinOrModeChanged(pin, mode) (isConfigurationChanged(pin) || isConfigurationChanged(mode)) #endif /* CONTROLLERS_CORE_COMMON_HEADERS_H_ */ diff --git a/firmware/controllers/core/core.mk b/firmware/controllers/core/core.mk index 1d3a00902c..e80f249eb7 100644 --- a/firmware/controllers/core/core.mk +++ b/firmware/controllers/core/core.mk @@ -1,6 +1,6 @@ CONTROLLERS_CORE_SRC_CPP = \ - $(PROJECT_DIR)/controllers/core/efi_wave.cpp \ + $(PROJECT_DIR)/controllers/core/state_sequence.cpp \ $(PROJECT_DIR)/controllers/core/fsio_core.cpp \ $(PROJECT_DIR)/controllers/core/fsio_impl.cpp \ diff --git a/firmware/controllers/core/error_handling.cpp b/firmware/controllers/core/error_handling.cpp index 9cf415bfd4..75feeea2b1 100644 --- a/firmware/controllers/core/error_handling.cpp +++ b/firmware/controllers/core/error_handling.cpp @@ -92,7 +92,10 @@ void chDbgPanic3(const char *msg, const char * file, int line) { static void printToStream(MemoryStream *stream, const char *fmt, va_list ap) { stream->eos = 0; // reset chvprintf((BaseSequentialStream *) stream, fmt, ap); - stream->buffer[stream->eos] = 0; + + // Terminate, but don't write past the end of the buffer + int terminatorLocation = minI(stream->eos, stream->size - 1); + stream->buffer[terminatorLocation] = '\0'; } static void printWarning(const char *fmt, va_list ap) { diff --git a/firmware/controllers/core/fsio_impl.cpp b/firmware/controllers/core/fsio_impl.cpp index d651b152dc..8b358f3a9c 100644 --- a/firmware/controllers/core/fsio_impl.cpp +++ b/firmware/controllers/core/fsio_impl.cpp @@ -12,13 +12,13 @@ */ #include "global.h" +#include "fsio_impl.h" +#include "allsensors.h" #if EFI_FSIO #include "os_access.h" -#include "fsio_impl.h" #include "settings.h" -#include "allsensors.h" #include "rpm_calculator.h" #include "efi_gpio.h" #include "pwm_generator_logic.h" @@ -102,6 +102,7 @@ static LEElement * acRelayLogic; static LEElement * fuelPumpLogic; static LEElement * radiatorFanLogic; static LEElement * alternatorLogic; +static LEElement * starterRelayLogic; #if EFI_MAIN_RELAY_CONTROL static LEElement * mainRelayLogic; @@ -194,7 +195,7 @@ static void setFsioDigitalInputPin(const char *indexStr, const char *pinName) { scheduleMsg(logger, "invalid pin name [%s]", pinName); return; } - CONFIGB(fsioDigitalInputs)[index] = pin; + CONFIG(fsioDigitalInputs)[index] = pin; scheduleMsg(logger, "FSIO digital input pin #%d [%s]", (index + 1), hwPortname(pin)); } @@ -464,6 +465,9 @@ void runFsio(DECLARE_ENGINE_PARAMETER_SIGNATURE) { enginePins.mainRelay.setValue(true); #endif /* EFI_MAIN_RELAY_CONTROL */ + if (CONFIGB(starterRelayPin) != GPIO_UNASSIGNED) + setPinState("starter_relay", &enginePins.starterRelay, starterRelayLogic PASS_ENGINE_PARAMETER_SUFFIX); + /** * o2 heater is off during cranking * todo: convert to FSIO? @@ -582,7 +586,7 @@ static void showFsioInfo(void) { } } for (int i = 0; i < FSIO_COMMAND_COUNT; i++) { - brain_pin_e inputPin = CONFIGB(fsioDigitalInputs)[i]; + brain_pin_e inputPin = CONFIG(fsioDigitalInputs)[i]; if (inputPin != GPIO_UNASSIGNED) { scheduleMsg(logger, "FSIO digital input #%d: %s", i, hwPortname(inputPin)); } @@ -673,6 +677,8 @@ void initFsioImpl(Logging *sharedLogger DECLARE_ENGINE_PARAMETER_SUFFIX) { if (CONFIGB(mainRelayPin) != GPIO_UNASSIGNED) mainRelayLogic = sysPool.parseExpression(MAIN_RELAY_LOGIC); #endif /* EFI_MAIN_RELAY_CONTROL */ + if (CONFIGB(starterRelayPin) != GPIO_UNASSIGNED) + starterRelayLogic = sysPool.parseExpression(STARTER_RELAY_LOGIC); #if EFI_PROD_CODE for (int i = 0; i < FSIO_COMMAND_COUNT; i++) { @@ -691,7 +697,7 @@ void initFsioImpl(Logging *sharedLogger DECLARE_ENGINE_PARAMETER_SUFFIX) { } for (int i = 0; i < FSIO_COMMAND_COUNT; i++) { - brain_pin_e inputPin = CONFIGB(fsioDigitalInputs)[i]; + brain_pin_e inputPin = CONFIG(fsioDigitalInputs)[i]; if (inputPin != GPIO_UNASSIGNED) { efiSetPadMode("FSIO input", inputPin, getInputMode(engineConfiguration->fsioInputModes[i])); @@ -724,5 +730,37 @@ void initFsioImpl(Logging *sharedLogger DECLARE_ENGINE_PARAMETER_SUFFIX) { } +#else /* !EFI_FSIO */ + +EXTERN_ENGINE +; +extern EnginePins enginePins; + +// "Limp-mode" implementation for some RAM-limited configs without FSIO +void runHardcodedFsio(DECLARE_ENGINE_PARAMETER_SIGNATURE) { + // see MAIN_RELAY_LOGIC + if (CONFIGB(mainRelayPin) != GPIO_UNASSIGNED) { + enginePins.mainRelay.setValue((getTimeNowSeconds() < 2) || (getVBatt(PASS_ENGINE_PARAMETER_SIGNATURE) > 5) || engine->isInShutdownMode()); + } + // see STARTER_RELAY_LOGIC + if (CONFIGB(starterRelayPin) != GPIO_UNASSIGNED) { + enginePins.starterRelay.setValue(engine->rpmCalculator.getRpm() < engineConfiguration->cranking.rpm); + } + // see FAN_CONTROL_LOGIC + if (CONFIGB(fanPin) != GPIO_UNASSIGNED) { + enginePins.fanRelay.setValue((enginePins.fanRelay.getLogicValue() && (getCoolantTemperature() > engineConfiguration->fanOffTemperature)) || + (getCoolantTemperature() > engineConfiguration->fanOnTemperature) || engine->isCltBroken); + } + // see AC_RELAY_LOGIC + if (CONFIGB(acRelayPin) != GPIO_UNASSIGNED) { + enginePins.acRelay.setValue(getAcToggle(PASS_ENGINE_PARAMETER_SIGNATURE) && engine->rpmCalculator.getRpm() > 850); + } + // see FUEL_PUMP_LOGIC + if (CONFIGB(fuelPumpPin) != GPIO_UNASSIGNED) { + enginePins.fuelPumpRelay.setValue((getTimeNowSeconds() < engineConfiguration->startUpFuelPumpDuration) || (engine->rpmCalculator.getRpm() > 0)); + } + + enginePins.o2heater.setValue(engine->rpmCalculator.isRunning(PASS_ENGINE_PARAMETER_SIGNATURE)); +} #endif /* EFI_FSIO */ diff --git a/firmware/controllers/core/fsio_impl.h b/firmware/controllers/core/fsio_impl.h index f9f728dadc..37fd5d3153 100644 --- a/firmware/controllers/core/fsio_impl.h +++ b/firmware/controllers/core/fsio_impl.h @@ -39,6 +39,7 @@ void setFsioExpression(const char *indexStr, const char *quotedLine DECLARE_ENGI float getFsioOutputValue(int index DECLARE_ENGINE_PARAMETER_SUFFIX); void applyFsioConfiguration(DECLARE_ENGINE_PARAMETER_SIGNATURE); void onConfigurationChangeFsioCallback(engine_configuration_s *previousConfiguration DECLARE_ENGINE_PARAMETER_SUFFIX); +void runHardcodedFsio(DECLARE_ENGINE_PARAMETER_SIGNATURE); ValueProvider3D *getFSIOTable(int index); diff --git a/firmware/controllers/core/efi_wave.cpp b/firmware/controllers/core/state_sequence.cpp similarity index 56% rename from firmware/controllers/core/efi_wave.cpp rename to firmware/controllers/core/state_sequence.cpp index 037402ff22..bb67dc25bd 100644 --- a/firmware/controllers/core/efi_wave.cpp +++ b/firmware/controllers/core/state_sequence.cpp @@ -1,59 +1,59 @@ /** - * @file EfiWave.cpp + * @file state_sequence.cpp * * @date May 18, 2014 * @author Andrey Belomutskiy, (c) 2012-2018 */ #include "global.h" -#include "efi_wave.h" +#include "state_sequence.h" #include "trigger_structure.h" -SingleWave::SingleWave() { +SingleChannelStateSequence::SingleChannelStateSequence() { init(NULL); } -SingleWave::SingleWave(pin_state_t *ps) { +SingleChannelStateSequence::SingleChannelStateSequence(pin_state_t *ps) { init(ps); } -void SingleWave::init(pin_state_t *pinStates) { +void SingleChannelStateSequence::init(pin_state_t *pinStates) { this->pinStates = pinStates; } -pin_state_t SingleWave::getState(int switchIndex) const { +pin_state_t SingleChannelStateSequence::getState(int switchIndex) const { pin_state_t state = pinStates[switchIndex]; efiAssert(OBD_PCM_Processor_Fault, state == 0 || state == 1, "wave state get", TV_FALL); return state; } -void SingleWave::setState(int switchIndex, pin_state_t state) { +void SingleChannelStateSequence::setState(int switchIndex, pin_state_t state) { efiAssertVoid(OBD_PCM_Processor_Fault, state == 0 || state == 1, "wave state set"); pinStates[switchIndex] = state; } -MultiWave::MultiWave() { +MultiChannelStateSequence::MultiChannelStateSequence() { reset(); } -MultiWave::MultiWave(float *switchTimes, SingleWave *waves) : MultiWave() { +MultiChannelStateSequence::MultiChannelStateSequence(float *switchTimes, SingleChannelStateSequence *waves) : MultiChannelStateSequence() { init(switchTimes, waves); } -void MultiWave::init(float *switchTimes, SingleWave *channels) { +void MultiChannelStateSequence::init(float *switchTimes, SingleChannelStateSequence *channels) { this->switchTimes = switchTimes; this->channels = channels; } -void MultiWave::reset(void) { +void MultiChannelStateSequence::reset(void) { waveCount = 0; } -float MultiWave::getSwitchTime(const int index) const { +float MultiChannelStateSequence::getSwitchTime(const int index) const { return switchTimes[index]; } -void MultiWave::checkSwitchTimes(const int size) { +void MultiChannelStateSequence::checkSwitchTimes(const int size) { if (switchTimes[size - 1] != 1) { firmwareError(CUSTOM_ERR_WAVE_1, "last switch time has to be 1 not %.2f", switchTimes[size - 1]); return; @@ -65,7 +65,7 @@ void MultiWave::checkSwitchTimes(const int size) { } } -pin_state_t MultiWave::getChannelState(const int channelIndex, const int phaseIndex) const { +pin_state_t MultiChannelStateSequence::getChannelState(const int channelIndex, const int phaseIndex) const { if (channelIndex >= waveCount) { // todo: would be nice to get this asserting working //firmwareError(OBD_PCM_Processor_Fault, "channel index %d/%d", channelIndex, waveCount); @@ -76,7 +76,7 @@ pin_state_t MultiWave::getChannelState(const int channelIndex, const int phaseIn /** * returns the index at which given value would need to be inserted into sorted array */ -int MultiWave::findInsertionAngle(const float angle, const int size) const { +int MultiChannelStateSequence::findInsertionAngle(const float angle, const int size) const { for (int i = size - 1; i >= 0; i--) { if (angle > switchTimes[i]) return i + 1; @@ -84,7 +84,7 @@ int MultiWave::findInsertionAngle(const float angle, const int size) const { return 0; } -int MultiWave::findAngleMatch(const float angle, const int size) const { +int MultiChannelStateSequence::findAngleMatch(const float angle, const int size) const { for (int i = 0; i < size; i++) { if (isSameF(switchTimes[i], angle)) return i; @@ -92,7 +92,7 @@ int MultiWave::findAngleMatch(const float angle, const int size) const { return EFI_ERROR_CODE; } -void MultiWave::setSwitchTime(const int index, const float value) { +void MultiChannelStateSequence::setSwitchTime(const int index, const float value) { efiAssertVoid(CUSTOM_ERR_PWM_SWITCH_ASSERT, switchTimes != NULL, "switchTimes"); switchTimes[index] = value; } diff --git a/firmware/controllers/core/efi_wave.h b/firmware/controllers/core/state_sequence.h similarity index 80% rename from firmware/controllers/core/efi_wave.h rename to firmware/controllers/core/state_sequence.h index 55d055a2ab..b549d9affc 100644 --- a/firmware/controllers/core/efi_wave.h +++ b/firmware/controllers/core/state_sequence.h @@ -1,11 +1,11 @@ /** - * @file efi_wave.h + * @file state_sequence.h * * @date May 18, 2014 - * @author Andrey Belomutskiy, (c) 2012-2017 + * @author Andrey Belomutskiy, (c) 2012-2019 */ -#ifndef EFI_WAVE_H_ -#define EFI_WAVE_H_ + +#pragma once #include "global.h" @@ -36,13 +36,14 @@ typedef trigger_value_e pin_state_t; * is not implemented using a bit array, it could absolutely be a bit array * * This sequence does not know anything about signal lengths - only signal state at a given index + * This sequence can have consecutive zeros and ones since these sequences work as a group within MultiChannelStateSequence * * @brief PWM configuration for the specific output pin */ -class SingleWave { +class SingleChannelStateSequence { public: - SingleWave(); - explicit SingleWave(pin_state_t *pinStates); + SingleChannelStateSequence(); + explicit SingleChannelStateSequence(pin_state_t *pinStates); void init(pin_state_t *pinStates); /** * todo: confirm that we only deal with two states here, no magic '-1'? @@ -59,11 +60,11 @@ public: * This class represents multi-channel logical signals with shared time axis * */ -class MultiWave { +class MultiChannelStateSequence { public: - MultiWave(); - MultiWave(float *switchTimes, SingleWave *waves); - void init(float *switchTimes, SingleWave *waves); + MultiChannelStateSequence(); + MultiChannelStateSequence(float *switchTimes, SingleChannelStateSequence *waves); + void init(float *switchTimes, SingleChannelStateSequence *waves); void reset(void); float getSwitchTime(const int phaseIndex) const; void setSwitchTime(const int phaseIndex, const float value); @@ -77,7 +78,7 @@ public: * Number of signal channels */ int waveCount; - SingleWave *channels = nullptr; + SingleChannelStateSequence *channels = nullptr; //private: /** * values in the (0..1] range which refer to points within the period at at which pin state should be changed @@ -86,4 +87,4 @@ public: float *switchTimes = nullptr; }; -#endif /* EFI_WAVE_H_ */ + diff --git a/firmware/controllers/engine_controller.cpp b/firmware/controllers/engine_controller.cpp index 778fb15646..202abfe541 100644 --- a/firmware/controllers/engine_controller.cpp +++ b/firmware/controllers/engine_controller.cpp @@ -42,8 +42,8 @@ #include "injector_central.h" #include "os_util.h" #include "engine_math.h" -#if EFI_WAVE_ANALYZER -#include "wave_analyzer.h" +#if EFI_LOGIC_ANALYZER +#include "logic_analyzer.h" #endif #include "allsensors.h" #include "electronic_throttle.h" @@ -207,6 +207,7 @@ static Overflow64Counter halTime; */ //todo: macro to save method invocation efitimeus_t getTimeNowUs(void) { + ScopePerf perf(PE::ScheduleByAngle); return getTimeNowNt() / (CORE_CLOCK / 1000000); } @@ -703,11 +704,11 @@ void initEngineContoller(Logging *sharedLogger DECLARE_ENGINE_PARAMETER_SUFFIX) initAlgo(sharedLogger); -#if EFI_WAVE_ANALYZER +#if EFI_LOGIC_ANALYZER if (engineConfiguration->isWaveAnalyzerEnabled) { initWaveAnalyzer(sharedLogger); } -#endif /* EFI_WAVE_ANALYZER */ +#endif /* EFI_LOGIC_ANALYZER */ #if EFI_CJ125 /** @@ -797,7 +798,7 @@ void initEngineContoller(Logging *sharedLogger DECLARE_ENGINE_PARAMETER_SUFFIX) // help to notice when RAM usage goes up - if a code change adds to RAM usage these variables would fail // linking process which is the way to raise the alarm #ifndef RAM_UNUSED_SIZE -#define RAM_UNUSED_SIZE 3000 +#define RAM_UNUSED_SIZE 2500 #endif #ifndef CCM_UNUSED_SIZE #define CCM_UNUSED_SIZE 4600 @@ -818,6 +819,6 @@ int getRusEfiVersion(void) { if (initBootloader() != 0) return 123; #endif /* EFI_BOOTLOADER_INCLUDE_CODE */ - return 20191117; + return 20191206; } #endif /* EFI_UNIT_TEST */ diff --git a/firmware/controllers/engine_cycle/aux_valves.cpp b/firmware/controllers/engine_cycle/aux_valves.cpp new file mode 100644 index 0000000000..9634e341e3 --- /dev/null +++ b/firmware/controllers/engine_cycle/aux_valves.cpp @@ -0,0 +1,189 @@ +/* + * aux_valves.cpp + * + * + * Here we have two auxilary digital on/off outputs which would open once per each 360 degrees of engine crank revolution. + * The second valve is 180 degrees after the first one. + * + * Valve open and close angles are taken from fsioCurve1 and fsioCurve2 tables respectively, the position depend on TPS input. + * + * https://github.com/rusefi/rusefi/issues/490 + * + * @date Nov 25, 2017 + * @author Andrey Belomutskiy, (c) 2012-2019 + */ + +#include "engine_math.h" +#include "aux_valves.h" +#include "allsensors.h" +#include "trigger_central.h" +#include "spark_logic.h" + +EXTERN_ENGINE +; + +void plainPinTurnOn(AuxActor *current) { + NamedOutputPin *output = &enginePins.auxValve[current->valveIndex]; + output->setHigh(); + +#if EFI_UNIT_TEST + Engine *engine = current->engine; + EXPAND_Engine; +#endif /* EFI_UNIT_TEST */ + + scheduleOrQueue(¤t->open, + TRIGGER_EVENT_UNDEFINED, + current->extra + engine->engineState.auxValveStart, + (schfunc_t)plainPinTurnOn, + current + PASS_ENGINE_PARAMETER_SUFFIX + ); + + angle_t duration = engine->engineState.auxValveEnd - engine->engineState.auxValveStart; + + fixAngle(duration, "duration", CUSTOM_ERR_6557); + + scheduleOrQueue(¤t->close, + TRIGGER_EVENT_UNDEFINED, + current->extra + engine->engineState.auxValveEnd, + (schfunc_t)plainPinTurnOff, + output + PASS_ENGINE_PARAMETER_SUFFIX + ); + } + +void plainPinTurnOff(NamedOutputPin *output) { + output->setLow(); +} + +/* +static void auxValveTriggerCallback(trigger_event_e ckpSignalType, + uint32_t index DECLARE_ENGINE_PARAMETER_SUFFIX) { + UNUSED(ckpSignalType); + + if (index != engine->auxSchedulingIndex) { + return; + } + int rpm = GET_RPM_VALUE; + if (!isValidRpm(rpm)) { + return; + } +*/ + /** + * Sometimes previous event has not yet been executed by the time we are scheduling new events. + * We use this array alternation in order to bring events that are scheled and waiting to be executed from + * events which are already being scheduled + */ +/* + int engineCycleAlternation = engine->triggerCentral.triggerState.getTotalRevolutionCounter() % CYCLE_ALTERNATION; + + for (int valveIndex = 0; valveIndex < AUX_DIGITAL_VALVE_COUNT; valveIndex++) { + + NamedOutputPin *output = &enginePins.auxValve[valveIndex]; + + for (int phaseIndex = 0; phaseIndex < 2; phaseIndex++) { +*/ +/* I believe a more correct implementation is the following: + * here we properly account for trigger angle position in engine cycle coordinates + // todo: at the moment this logic is assuming four-stroke 720-degree engine cycle + angle_t extra = phaseIndex * 360 // cycle opens twice per 720 engine cycle + + valveIndex * 180 // 2nd valve is operating at 180 offset to first + + tdcPosition() // engine cycle position to trigger cycle position conversion + - ENGINE(triggerCentral.triggerShape.eventAngles[SCHEDULING_TRIGGER_INDEX]) + ; +*/ +/* + angle_t extra = phaseIndex * 360 + valveIndex * 180; + angle_t onTime = extra + engine->engineState.auxValveStart; + scheduling_s *onEvent = &engine->auxTurnOnEvent[valveIndex][phaseIndex][engineCycleAlternation]; + scheduling_s *offEvent = &engine->auxTurnOffEvent[valveIndex][phaseIndex][engineCycleAlternation]; + bool isOverlap = onEvent->isScheduled || offEvent->isScheduled; + if (isOverlap) { + enginePins.debugTriggerSync.setValue(1); + } + + fixAngle(onTime, "onTime", CUSTOM_ERR_6556); + scheduleByAngle(onEvent, + onTime, + (schfunc_t) &plainPinTurnOn, output PASS_ENGINE_PARAMETER_SUFFIX); + angle_t offTime = extra + engine->engineState.auxValveEnd; + fixAngle(offTime, "offTime", CUSTOM_ERR_6557); + scheduleByAngle(offEvent, + offTime, + (schfunc_t) &plainPinTurnOff, output PASS_ENGINE_PARAMETER_SUFFIX); + if (isOverlap) { + enginePins.debugTriggerSync.setValue(0); + } + } + } +} +*/ + +void initAuxValves(Logging *sharedLogger DECLARE_ENGINE_PARAMETER_SUFFIX) { + UNUSED(sharedLogger); + if (engineConfiguration->auxValves[0] == GPIO_UNASSIGNED) { + return; + } + +#if !EFI_UNIT_TEST + // let's give it time to grab TPS value + chThdSleepMilliseconds(50); +#endif /* EFI_UNIT_TESTS */ + + float tps = getTPS(PASS_ENGINE_PARAMETER_SIGNATURE); + if (cisnan(tps)) { + firmwareError(CUSTOM_OBD_91, "No TPS for Aux Valves"); + return; + } + + updateAuxValves(PASS_ENGINE_PARAMETER_SIGNATURE); + + for (int valveIndex = 0; valveIndex < AUX_DIGITAL_VALVE_COUNT; valveIndex++) { + + for (int phaseIndex = 0; phaseIndex < 2; phaseIndex++) { + AuxActor *actor = &engine->auxValves[valveIndex][phaseIndex]; + actor->phaseIndex = phaseIndex; + actor->valveIndex = valveIndex; + actor->extra = phaseIndex * 360 + valveIndex * 180; + + INJECT_ENGINE_REFERENCE(actor); + + scheduleOrQueue(&actor->open, + TRIGGER_EVENT_UNDEFINED, + actor->extra + engine->engineState.auxValveStart, + (schfunc_t)plainPinTurnOn, + actor + PASS_ENGINE_PARAMETER_SUFFIX + ); + } + } + + +// addTriggerEventListener(auxValveTriggerCallback, "AuxV", engine); +} + +void updateAuxValves(DECLARE_ENGINE_PARAMETER_SIGNATURE) { + if (engineConfiguration->auxValves[0] == GPIO_UNASSIGNED) { + return; + } + + float tps = getTPS(PASS_ENGINE_PARAMETER_SIGNATURE); + if (cisnan(tps)) { + // error should be already reported by now + return; + } + engine->engineState.auxValveStart = interpolate2d("aux", tps, + engineConfiguration->fsioCurve1Bins, + engineConfiguration->fsioCurve1); + + engine->engineState.auxValveEnd = interpolate2d("aux", tps, + engineConfiguration->fsioCurve2Bins, + engineConfiguration->fsioCurve2); + + if (engine->engineState.auxValveStart >= engine->engineState.auxValveEnd) { + // this is a fatal error to make this really visible + firmwareError(CUSTOM_AUX_OUT_OF_ORDER, "out of order at %.2f %.2f %.2f", tps, + engine->engineState.auxValveStart, + engine->engineState.auxValveEnd); + } +} diff --git a/firmware/controllers/engine_cycle/aux_valves.h b/firmware/controllers/engine_cycle/aux_valves.h new file mode 100644 index 0000000000..3f28d16e8f --- /dev/null +++ b/firmware/controllers/engine_cycle/aux_valves.h @@ -0,0 +1,15 @@ +/* + * @file aux_valves.h + * + * @date Nov 25, 2017 + * @author Andrey Belomutskiy, (c) 2012-2019 + */ + +#pragma once + +#include "engine.h" + +void initAuxValves(Logging *sharedLogger DECLARE_ENGINE_PARAMETER_SUFFIX); +void updateAuxValves(DECLARE_ENGINE_PARAMETER_SIGNATURE); +void plainPinTurnOn(AuxActor *current); +void plainPinTurnOff(NamedOutputPin *output); diff --git a/firmware/controllers/trigger/main_trigger_callback.cpp b/firmware/controllers/engine_cycle/main_trigger_callback.cpp similarity index 99% rename from firmware/controllers/trigger/main_trigger_callback.cpp rename to firmware/controllers/engine_cycle/main_trigger_callback.cpp index 6bac5d4551..647a3ee6c1 100644 --- a/firmware/controllers/trigger/main_trigger_callback.cpp +++ b/firmware/controllers/engine_cycle/main_trigger_callback.cpp @@ -494,10 +494,10 @@ void mainTriggerCallback(trigger_event_e ckpSignalType, uint32_t trgEventIndex D } if (checkIfTriggerConfigChanged(PASS_ENGINE_PARAMETER_SIGNATURE)) { - engine->ignitionEvents.isReady = false; // we need to rebuild ignition schedule + engine->ignitionEvents.isReady = false; // we need to rebuild complete ignition schedule engine->injectionEvents.isReady = false; // moved 'triggerIndexByAngle' into trigger initialization (why was it invoked from here if it's only about trigger shape & optimization?) - // see initializeTriggerShape() -> prepareOutputSignals(PASS_ENGINE_PARAMETER_SIGNATURE) + // see initializeTriggerWaveform() -> prepareOutputSignals(PASS_ENGINE_PARAMETER_SIGNATURE) // we need this to apply new 'triggerIndexByAngle' values engine->periodicFastCallback(PASS_ENGINE_PARAMETER_SIGNATURE); diff --git a/firmware/controllers/trigger/main_trigger_callback.h b/firmware/controllers/engine_cycle/main_trigger_callback.h similarity index 100% rename from firmware/controllers/trigger/main_trigger_callback.h rename to firmware/controllers/engine_cycle/main_trigger_callback.h diff --git a/firmware/controllers/map_averaging.cpp b/firmware/controllers/engine_cycle/map_averaging.cpp similarity index 98% rename from firmware/controllers/map_averaging.cpp rename to firmware/controllers/engine_cycle/map_averaging.cpp index 90caf93845..070408753a 100644 --- a/firmware/controllers/map_averaging.cpp +++ b/firmware/controllers/engine_cycle/map_averaging.cpp @@ -236,7 +236,7 @@ void refreshMapAveragingPreCalc(DECLARE_ENGINE_PARAMETER_SIGNATURE) { angle_t start = interpolate2d("mapa", rpm, c->samplingAngleBins, c->samplingAngle); efiAssertVoid(CUSTOM_ERR_MAP_START_ASSERT, !cisnan(start), "start"); - angle_t offsetAngle = TRIGGER_SHAPE(eventAngles[CONFIG(mapAveragingSchedulingAtIndex)]); + angle_t offsetAngle = TRIGGER_WAVEFORM(eventAngles[CONFIG(mapAveragingSchedulingAtIndex)]); efiAssertVoid(CUSTOM_ERR_MAP_AVG_OFFSET, !cisnan(offsetAngle), "offsetAngle"); for (int i = 0; i < engineConfiguration->specs.cylindersCount; i++) { @@ -313,9 +313,9 @@ static void mapAveragingTriggerCallback(trigger_event_e ckpEventType, // at the moment we schedule based on time prediction based on current RPM and angle // we are loosing precision in case of changing RPM - the further away is the event the worse is precision // todo: schedule this based on closest trigger event, same as ignition works - scheduleByAngle(rpm, &startTimer[i][structIndex], samplingStart, + scheduleByAngle(&startTimer[i][structIndex], samplingStart, startAveraging, NULL PASS_ENGINE_PARAMETER_SUFFIX); - scheduleByAngle(rpm, &endTimer[i][structIndex], samplingEnd, + scheduleByAngle(&endTimer[i][structIndex], samplingEnd, endAveraging, NULL PASS_ENGINE_PARAMETER_SUFFIX); engine->m.mapAveragingCbTime = getTimeNowLowerNt() - engine->m.beforeMapAveragingCb; diff --git a/firmware/controllers/map_averaging.h b/firmware/controllers/engine_cycle/map_averaging.h similarity index 100% rename from firmware/controllers/map_averaging.h rename to firmware/controllers/engine_cycle/map_averaging.h diff --git a/firmware/controllers/engine_cycle/readme.md b/firmware/controllers/engine_cycle/readme.md new file mode 100644 index 0000000000..111595326d --- /dev/null +++ b/firmware/controllers/engine_cycle/readme.md @@ -0,0 +1 @@ +Here we have logic related to engine contol activitied within each engine cycle: coils & injectors mostly. \ No newline at end of file diff --git a/firmware/controllers/trigger/rpm_calculator.cpp b/firmware/controllers/engine_cycle/rpm_calculator.cpp similarity index 96% rename from firmware/controllers/trigger/rpm_calculator.cpp rename to firmware/controllers/engine_cycle/rpm_calculator.cpp index 107f47f7d8..980e3eb3ba 100644 --- a/firmware/controllers/trigger/rpm_calculator.cpp +++ b/firmware/controllers/engine_cycle/rpm_calculator.cpp @@ -269,7 +269,7 @@ void rpmShaftPositionCallback(trigger_event_e ckpSignalType, int signal = 1000 * ckpSignalType + index; scAddData(crankAngle, signal); } -#endif +#endif /* EFI_SENSOR_CHART */ if (rpmState->isSpinningUp(PASS_ENGINE_PARAMETER_SIGNATURE)) { // we are here only once trigger is synchronized for the first time @@ -296,6 +296,9 @@ static char rpmBuffer[_MAX_FILLER]; * digital sniffer. */ static void onTdcCallback(Engine *engine) { + if (!engine->needTdcCallback) { + return; + } EXPAND_Engine; itoa10(rpmBuffer, GET_RPM()); #if EFI_ENGINE_SNIFFER @@ -316,7 +319,7 @@ static void tdcMarkCallback(trigger_event_e ckpSignalType, int rpm = GET_RPM(); // todo: use tooth event-based scheduling, not just time-based scheduling if (isValidRpm(rpm)) { - scheduleByAngle(rpm, &tdcScheduler[revIndex2], tdcPosition(), + scheduleByAngle(&tdcScheduler[revIndex2], tdcPosition(), (schfunc_t) onTdcCallback, engine PASS_ENGINE_PARAMETER_SUFFIX); } } @@ -355,14 +358,9 @@ void initRpmCalculator(Logging *sharedLogger DECLARE_ENGINE_PARAMETER_SUFFIX) { * The callback would be executed once after the duration of time which * it takes the crankshaft to rotate to the specified angle. */ -void scheduleByAngle(float rpm, scheduling_s *timer, angle_t angle, +void scheduleByAngle(scheduling_s *timer, angle_t angle, schfunc_t callback, void *param DECLARE_ENGINE_PARAMETER_SUFFIX) { - ScopePerf perf(PE::ScheduleByAngle); - - efiAssertVoid(CUSTOM_ANGLE_NAN, !cisnan(angle), "NaN angle?"); - efiAssertVoid(CUSTOM_ERR_6634, isValidRpm(rpm), "RPM check expected"); float delayUs = ENGINE(rpmCalculator.oneDegreeUs) * angle; - efiAssertVoid(CUSTOM_ERR_6635, !cisnan(delayUs), "NaN delay?"); ENGINE(executor.scheduleForLater(timer, (int) delayUs, callback, param)); } diff --git a/firmware/controllers/trigger/rpm_calculator.h b/firmware/controllers/engine_cycle/rpm_calculator.h similarity index 97% rename from firmware/controllers/trigger/rpm_calculator.h rename to firmware/controllers/engine_cycle/rpm_calculator.h index 6df6cc0c9d..e7be215c06 100644 --- a/firmware/controllers/trigger/rpm_calculator.h +++ b/firmware/controllers/engine_cycle/rpm_calculator.h @@ -166,6 +166,6 @@ float getCrankshaftAngleNt(efitime_t timeNt DECLARE_ENGINE_PARAMETER_SUFFIX); #define addEngineSnifferEvent(n, msg) {} #endif /* EFI_ENGINE_SNIFFER */ -void scheduleByAngle(float rpm, scheduling_s *timer, angle_t angle, schfunc_t callback, void *param DECLARE_ENGINE_PARAMETER_SUFFIX); +void scheduleByAngle(scheduling_s *timer, angle_t angle, schfunc_t callback, void *param DECLARE_ENGINE_PARAMETER_SUFFIX); #endif /* RPM_REPORTER_H_ */ diff --git a/firmware/controllers/trigger/spark_logic.cpp b/firmware/controllers/engine_cycle/spark_logic.cpp similarity index 79% rename from firmware/controllers/trigger/spark_logic.cpp rename to firmware/controllers/engine_cycle/spark_logic.cpp index 82cc763f46..e28543373d 100644 --- a/firmware/controllers/trigger/spark_logic.cpp +++ b/firmware/controllers/engine_cycle/spark_logic.cpp @@ -5,7 +5,7 @@ * @author Andrey Belomutskiy, (c) 2012-2019 */ -#include "global.h" +#include "spark_logic.h" #include "os_access.h" #include "engine_math.h" @@ -75,7 +75,7 @@ static void fireSparkBySettingPinLow(IgnitionEvent *event, IgnitionOutputPin *ou } \ } -static void prepareCylinderIgnitionSchedule(angle_t dwellAngle, floatms_t sparkDwell, IgnitionEvent *event DECLARE_ENGINE_PARAMETER_SUFFIX) { +static void prepareCylinderIgnitionSchedule(angle_t dwellAngleDuration, floatms_t sparkDwell, IgnitionEvent *event DECLARE_ENGINE_PARAMETER_SUFFIX) { // todo: clean up this implementation? does not look too nice as is. // let's save planned duration so that we can later compare it with reality @@ -84,11 +84,12 @@ static void prepareCylinderIgnitionSchedule(angle_t dwellAngle, floatms_t sparkD // change of sign here from 'before TDC' to 'after TDC' angle_t ignitionPositionWithinEngineCycle = ENGINE(ignitionPositionWithinEngineCycle[event->cylinderIndex]); assertAngleRange(ignitionPositionWithinEngineCycle, "aPWEC", CUSTOM_ERR_6566); - cfg_float_t_1f timing_offset_cylinder = CONFIG(timing_offset_cylinder[event->cylinderIndex]); - const angle_t localAdvance = -ENGINE(engineState.timingAdvance) + ignitionPositionWithinEngineCycle + timing_offset_cylinder; - efiAssertVoid(CUSTOM_ERR_6689, !cisnan(localAdvance), "findAngle#9"); + // this correction is usually zero (not used) + cfg_float_t_1f perCylinderCorrection = CONFIG(timing_offset_cylinder[event->cylinderIndex]); + const angle_t sparkAngle = -ENGINE(engineState.timingAdvance) + ignitionPositionWithinEngineCycle + perCylinderCorrection; + efiAssertVoid(CUSTOM_SPARK_ANGLE_9, !cisnan(sparkAngle), "findAngle#9"); - efiAssertVoid(CUSTOM_ERR_6589, !cisnan(localAdvance), "localAdvance#1"); + efiAssertVoid(CUSTOM_SPARK_ANGLE_1, !cisnan(sparkAngle), "sparkAngle#1"); const int index = ENGINE(ignitionPin[event->cylinderIndex]); const int coilIndex = ID2INDEX(getCylinderId(index PASS_ENGINE_PARAMETER_SUFFIX)); IgnitionOutputPin *output = &enginePins.coils[coilIndex]; @@ -107,12 +108,12 @@ static void prepareCylinderIgnitionSchedule(angle_t dwellAngle, floatms_t sparkD event->outputs[0] = output; event->outputs[1] = secondOutput; - event->advance = localAdvance; + event->sparkAngle = sparkAngle; - angle_t a = localAdvance - dwellAngle; - efiAssertVoid(CUSTOM_ERR_6590, !cisnan(a), "findAngle#5"); - assertAngleRange(a, "findAngle#a6", CUSTOM_ERR_6550); - TRIGGER_SHAPE(findTriggerPosition(&event->dwellPosition, a PASS_CONFIG_PARAM(engineConfiguration->globalTriggerAngleOffset))); + angle_t dwellStartAngle = sparkAngle - dwellAngleDuration; + efiAssertVoid(CUSTOM_ERR_6590, !cisnan(dwellStartAngle), "findAngle#5"); + assertAngleRange(dwellStartAngle, "findAngle#a6", CUSTOM_ERR_6550); + event->dwellPosition.setAngle(dwellStartAngle PASS_ENGINE_PARAMETER_SUFFIX); #if FUEL_MATH_EXTREME_LOGGING printf("addIgnitionEvent %s ind=%d\n", output->name, event->dwellPosition.triggerEventIndex); @@ -156,13 +157,13 @@ if (engineConfiguration->debugMode == DBG_DWELL_METRIC) { #endif /* EFI_UNIT_TEST */ // now that we've just fired a coil let's prepare the new schedule for the next engine revolution - angle_t dwellAngle = ENGINE(engineState.dwellAngle); + angle_t dwellAngleDuration = ENGINE(engineState.dwellAngle); floatms_t sparkDwell = ENGINE(engineState.sparkDwell); - if (cisnan(dwellAngle) || cisnan(sparkDwell)) { + if (cisnan(dwellAngleDuration) || cisnan(sparkDwell)) { // we are here if engine has just stopped return; } - prepareCylinderIgnitionSchedule(dwellAngle, sparkDwell, event PASS_ENGINE_PARAMETER_SUFFIX); + prepareCylinderIgnitionSchedule(dwellAngleDuration, sparkDwell, event PASS_ENGINE_PARAMETER_SUFFIX); } static void startDwellByTurningSparkPinHigh(IgnitionEvent *event, IgnitionOutputPin *output) { @@ -215,16 +216,72 @@ void turnSparkPinHigh(IgnitionEvent *event) { } } +static bool assertNotInIgnitionList(AngleBasedEvent *head, AngleBasedEvent *element) { + assertNotInListMethodBody(AngleBasedEvent, head, element, nextToothEvent) +} + +/** + * @return true if event corresponds to current tooth and was time-based scheduler + * false if event was put into queue for scheduling at a later tooth + */ +bool scheduleOrQueue(AngleBasedEvent *event, + uint32_t trgEventIndex, + angle_t angle, + schfunc_t callback, + void *param DECLARE_ENGINE_PARAMETER_SUFFIX) { + event->position.setAngle(angle PASS_ENGINE_PARAMETER_SUFFIX); + + /** + * todo: extract a "scheduleForAngle" method with best implementation into a separate utility method + * + * Here's the status as of Nov 2018: + * "scheduleForLater" uses time only and for best precision it's best to use "scheduleForLater" only + * once we hit the last trigger tooth prior to needed event. This case we use as much trigger position angle as possible + * and only use less precise RPM-based time calculation for the last portion of the angle, the one between two teeth closest to the + * desired angle moment. + * + * At the moment we only have time-based scheduler. I believe what needs to be added is a trigger-event based scheduler on top of the + * time-based schedule. This case we would be firing events with best possible angle precision. + * + */ + if (trgEventIndex != TRIGGER_EVENT_UNDEFINED && event->position.triggerEventIndex == trgEventIndex) { + /** + * Spark should be fired before the next trigger event - time-based delay is best precision possible + */ + float timeTillIgnitionUs = ENGINE(rpmCalculator.oneDegreeUs) * event->position.angleOffsetFromTriggerEvent; + + + scheduling_s * sDown = &event->scheduling; + + engine->executor.scheduleForLater(sDown, (int) timeTillIgnitionUs, callback, param); + return true; + } else { + event->action.setAction(callback, param); + /** + * Spark should be scheduled in relation to some future trigger event, this way we get better firing precision + */ + bool isPending = assertNotInIgnitionList(ENGINE(angleBasedEventsHead), event); + if (isPending) { +#if SPARK_EXTREME_LOGGING + scheduleMsg(logger, "isPending thus not adding to queue index=%d rev=%d now=%d", trgEventIndex, getRevolutionCounter(), (int)getTimeNowUs()); +#endif /* FUEL_MATH_EXTREME_LOGGING */ + } else { + LL_APPEND2(ENGINE(angleBasedEventsHead), event, nextToothEvent); + } + return false; + } +} + static ALWAYS_INLINE void handleSparkEvent(bool limitedSpark, uint32_t trgEventIndex, IgnitionEvent *iEvent, int rpm DECLARE_ENGINE_PARAMETER_SUFFIX) { - angle_t advance = iEvent->advance; + angle_t sparkAngle = iEvent->sparkAngle; const floatms_t dwellMs = ENGINE(engineState.sparkDwell); if (cisnan(dwellMs) || dwellMs <= 0) { warning(CUSTOM_DWELL, "invalid dwell to handle: %.2f at %d", dwellMs, rpm); return; } - if (cisnan(advance)) { + if (cisnan(sparkAngle)) { warning(CUSTOM_ERR_6688, "NaN advance"); return; } @@ -247,7 +304,6 @@ static ALWAYS_INLINE void handleSparkEvent(bool limitedSpark, uint32_t trgEventI * when an event is scheduled within the next revolution. */ scheduling_s * sUp = &iEvent->dwellStartTimer; - scheduling_s * sDown = &iEvent->signalTimerDown; /** @@ -272,59 +328,31 @@ static ALWAYS_INLINE void handleSparkEvent(bool limitedSpark, uint32_t trgEventI * TODO: improve precision */ - efiAssertVoid(CUSTOM_ERR_6591, !cisnan(advance), "findAngle#4"); - assertAngleRange(advance, "findAngle#a5", CUSTOM_ERR_6549); - TRIGGER_SHAPE(findTriggerPosition(&iEvent->sparkPosition, advance PASS_CONFIG_PARAM(engineConfiguration->globalTriggerAngleOffset))); + efiAssertVoid(CUSTOM_ERR_6591, !cisnan(sparkAngle), "findAngle#4"); + assertAngleRange(sparkAngle, "findAngle#a5", CUSTOM_ERR_6549); + + + bool scheduled = scheduleOrQueue(&iEvent->sparkEvent, trgEventIndex, sparkAngle, (schfunc_t)fireSparkAndPrepareNextSchedule, iEvent PASS_ENGINE_PARAMETER_SUFFIX); + + if (scheduled) { +#if SPARK_EXTREME_LOGGING + scheduleMsg(logger, "scheduling sparkDown ind=%d %d %s now=%d later id=%d", trgEventIndex, getRevolutionCounter(), iEvent->getOutputForLoggins()->name, (int)getTimeNowUs(), iEvent->sparkId); +#endif /* FUEL_MATH_EXTREME_LOGGING */ + } else { +#if SPARK_EXTREME_LOGGING + scheduleMsg(logger, "to queue sparkDown ind=%d %d %s now=%d for id=%d", trgEventIndex, getRevolutionCounter(), iEvent->getOutputForLoggins()->name, (int)getTimeNowUs(), iEvent->sparkEvent.position.triggerEventIndex); +#endif /* FUEL_MATH_EXTREME_LOGGING */ + } + + #if EFI_UNIT_TEST if (verboseMode) { printf("spark dwell@ %d/%d spark@ %d/%d id=%d\r\n", iEvent->dwellPosition.triggerEventIndex, (int)iEvent->dwellPosition.angleOffsetFromTriggerEvent, - iEvent->sparkPosition.triggerEventAngle, (int)iEvent->sparkPosition.angleOffsetFromTriggerEvent, + iEvent->sparkEvent.position.triggerEventIndex, (int)iEvent->sparkEvent.position.angleOffsetFromTriggerEvent, iEvent->sparkId); } #endif - - /** - * todo: extract a "scheduleForAngle" method with best implementation into a separate utility method - * - * Here's the status as of Nov 2018: - * "scheduleForLater" uses time only and for best precision it's best to use "scheduleForLater" only - * once we hit the last trigger tooth prior to needed event. This case we use as much trigger position angle as possible - * and only use less precise RPM-based time calculation for the last portion of the angle, the one between two teeth closest to the - * desired angle moment. - * - * At the moment we only have time-based scheduler. I believe what needs to be added is a trigger-event based scheduler on top of the - * time-based schedule. This case we would be firing events with best possible angle precision. - * - */ - if (iEvent->sparkPosition.triggerEventIndex == trgEventIndex) { - /** - * Spark should be fired before the next trigger event - time-based delay is best precision possible - */ - float timeTillIgnitionUs = ENGINE(rpmCalculator.oneDegreeUs) * iEvent->sparkPosition.angleOffsetFromTriggerEvent; - -#if SPARK_EXTREME_LOGGING - scheduleMsg(logger, "scheduling sparkDown ind=%d %d %s now=%d %d later id=%d", trgEventIndex, getRevolutionCounter(), iEvent->getOutputForLoggins()->name, (int)getTimeNowUs(), (int)timeTillIgnitionUs, iEvent->sparkId); -#endif /* FUEL_MATH_EXTREME_LOGGING */ - - engine->executor.scheduleForLater(sDown, (int) timeTillIgnitionUs, (schfunc_t) &fireSparkAndPrepareNextSchedule, iEvent); - } else { -#if SPARK_EXTREME_LOGGING - scheduleMsg(logger, "to queue sparkDown ind=%d %d %s %d for %d", trgEventIndex, getRevolutionCounter(), iEvent->getOutputForLoggins()->name, (int)getTimeNowUs(), iEvent->sparkPosition.triggerEventIndex); -#endif /* FUEL_MATH_EXTREME_LOGGING */ - /** - * Spark should be scheduled in relation to some future trigger event, this way we get better firing precision - */ - bool isPending = assertNotInList(ENGINE(ignitionEventsHead), iEvent); - if (isPending) { -#if SPARK_EXTREME_LOGGING - scheduleMsg(logger, "not adding to queue sparkDown ind=%d %d %s %d", trgEventIndex, getRevolutionCounter(), iEvent->getOutputForLoggins()->name, (int)getTimeNowUs()); -#endif /* FUEL_MATH_EXTREME_LOGGING */ - return; - } - - LL_APPEND(ENGINE(ignitionEventsHead), iEvent); - } } void initializeIgnitionActions(DECLARE_ENGINE_PARAMETER_SIGNATURE) { @@ -381,23 +409,23 @@ static ALWAYS_INLINE void prepareIgnitionSchedule(DECLARE_ENGINE_PARAMETER_SIGNA static void scheduleAllSparkEventsUntilNextTriggerTooth(uint32_t trgEventIndex DECLARE_ENGINE_PARAMETER_SUFFIX) { - IgnitionEvent *current, *tmp; + AngleBasedEvent *current, *tmp; - LL_FOREACH_SAFE(ENGINE(ignitionEventsHead), current, tmp) + LL_FOREACH_SAFE2(ENGINE(angleBasedEventsHead), current, tmp, nextToothEvent) { - if (current->sparkPosition.triggerEventIndex == trgEventIndex) { + if (current->position.triggerEventIndex == trgEventIndex) { // time to fire a spark which was scheduled previously - LL_DELETE(ENGINE(ignitionEventsHead), current); + LL_DELETE2(ENGINE(angleBasedEventsHead), current, nextToothEvent); - scheduling_s * sDown = ¤t->signalTimerDown; + scheduling_s * sDown = ¤t->scheduling; #if SPARK_EXTREME_LOGGING - scheduleMsg(logger, "time to sparkDown ind=%d %d %s %d", trgEventIndex, getRevolutionCounter(), current->getOutputForLoggins()->name, (int)getTimeNowUs()); + scheduleMsg(logger, "time to invoke ind=%d %d %d", trgEventIndex, getRevolutionCounter(), (int)getTimeNowUs()); #endif /* FUEL_MATH_EXTREME_LOGGING */ - float timeTillIgnitionUs = ENGINE(rpmCalculator.oneDegreeUs) * current->sparkPosition.angleOffsetFromTriggerEvent; - engine->executor.scheduleForLater(sDown, (int) timeTillIgnitionUs, (schfunc_t) &fireSparkAndPrepareNextSchedule, current); + float timeTillIgnitionUs = ENGINE(rpmCalculator.oneDegreeUs) * current->position.angleOffsetFromTriggerEvent; + engine->executor.scheduleForLater(sDown, (int) timeTillIgnitionUs, (schfunc_t) current->action.getCallback(), current->action.getArgument()); } } } diff --git a/firmware/controllers/trigger/spark_logic.h b/firmware/controllers/engine_cycle/spark_logic.h similarity index 76% rename from firmware/controllers/trigger/spark_logic.h rename to firmware/controllers/engine_cycle/spark_logic.h index 818855aee9..914bf332ae 100644 --- a/firmware/controllers/trigger/spark_logic.h +++ b/firmware/controllers/engine_cycle/spark_logic.h @@ -5,8 +5,7 @@ * @author Andrey Belomutskiy, (c) 2012-2017 */ -#ifndef CONTROLLERS_TRIGGER_SPARK_LOGIC_H_ -#define CONTROLLERS_TRIGGER_SPARK_LOGIC_H_ +#pragma once #include "engine.h" @@ -19,4 +18,9 @@ int getNumberOfSparks(ignition_mode_e mode DECLARE_ENGINE_PARAMETER_SUFFIX); percent_t getCoilDutyCycle(int rpm DECLARE_ENGINE_PARAMETER_SUFFIX); void initializeIgnitionActions(DECLARE_ENGINE_PARAMETER_SIGNATURE); -#endif /* CONTROLLERS_TRIGGER_SPARK_LOGIC_H_ */ +#define TRIGGER_EVENT_UNDEFINED -1 +bool scheduleOrQueue(AngleBasedEvent *event, + uint32_t trgEventIndex, + angle_t angle, + schfunc_t callback, + void *param DECLARE_ENGINE_PARAMETER_SUFFIX); diff --git a/firmware/controllers/actuators/lcd_controller.cpp b/firmware/controllers/gauges/lcd_controller.cpp similarity index 100% rename from firmware/controllers/actuators/lcd_controller.cpp rename to firmware/controllers/gauges/lcd_controller.cpp diff --git a/firmware/controllers/actuators/lcd_controller.h b/firmware/controllers/gauges/lcd_controller.h similarity index 100% rename from firmware/controllers/actuators/lcd_controller.h rename to firmware/controllers/gauges/lcd_controller.h diff --git a/firmware/controllers/algo/lcd_menu_tree.cpp b/firmware/controllers/gauges/lcd_menu_tree.cpp similarity index 100% rename from firmware/controllers/algo/lcd_menu_tree.cpp rename to firmware/controllers/gauges/lcd_menu_tree.cpp diff --git a/firmware/controllers/algo/lcd_menu_tree.h b/firmware/controllers/gauges/lcd_menu_tree.h similarity index 100% rename from firmware/controllers/algo/lcd_menu_tree.h rename to firmware/controllers/gauges/lcd_menu_tree.h diff --git a/firmware/controllers/algo/malfunction_central.cpp b/firmware/controllers/gauges/malfunction_central.cpp similarity index 100% rename from firmware/controllers/algo/malfunction_central.cpp rename to firmware/controllers/gauges/malfunction_central.cpp diff --git a/firmware/controllers/algo/malfunction_central.h b/firmware/controllers/gauges/malfunction_central.h similarity index 100% rename from firmware/controllers/algo/malfunction_central.h rename to firmware/controllers/gauges/malfunction_central.h diff --git a/firmware/controllers/actuators/malfunction_indicator.cpp b/firmware/controllers/gauges/malfunction_indicator.cpp similarity index 100% rename from firmware/controllers/actuators/malfunction_indicator.cpp rename to firmware/controllers/gauges/malfunction_indicator.cpp diff --git a/firmware/controllers/actuators/malfunction_indicator.h b/firmware/controllers/gauges/malfunction_indicator.h similarity index 100% rename from firmware/controllers/actuators/malfunction_indicator.h rename to firmware/controllers/gauges/malfunction_indicator.h diff --git a/firmware/controllers/gauges/readme.md b/firmware/controllers/gauges/readme.md new file mode 100644 index 0000000000..e4952d8b09 --- /dev/null +++ b/firmware/controllers/gauges/readme.md @@ -0,0 +1 @@ +This folder has code related to communication with the human behind the steering wheel: tachometer, check engine light, LCD etc etc. \ No newline at end of file diff --git a/firmware/controllers/actuators/tachometer.cpp b/firmware/controllers/gauges/tachometer.cpp similarity index 100% rename from firmware/controllers/actuators/tachometer.cpp rename to firmware/controllers/gauges/tachometer.cpp diff --git a/firmware/controllers/actuators/tachometer.h b/firmware/controllers/gauges/tachometer.h similarity index 100% rename from firmware/controllers/actuators/tachometer.h rename to firmware/controllers/gauges/tachometer.h diff --git a/firmware/controllers/generated/engine_configuration_generated_structures.h b/firmware/controllers/generated/engine_configuration_generated_structures.h index 740e942499..9cb32cec57 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 integration\rusefi_config.txt Tue Nov 19 09:22:58 EST 2019 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sun Dec 08 00:34:44 EST 2019 // by class com.rusefi.output.CHeaderConsumer // begin #ifndef CONTROLLERS_GENERATED_ENGINE_CONFIGURATION_GENERATED_STRUCTURES_H @@ -595,9 +595,14 @@ struct board_configuration_s { */ pin_output_mode_e mc33972_csPinMode; /** + * Useful in Research&Development phase * offset 80 */ - etb_io etb1; + adc_channel_e auxFastSensor1_adcChannel; + /** + * offset 81 + */ + uint8_t unused556[3]; /** * offset 84 */ @@ -858,11 +863,19 @@ struct board_configuration_s { /** * offset 207 */ - uint8_t unusedSpiPadding2; + brain_pin_e debugMapAveraging; /** * offset 208 */ - uint8_t unuseduartPadding1[4]; + brain_pin_e starterRelayPin; + /** + * offset 209 + */ + pin_output_mode_e starterRelayPinMode; + /** + * offset 210 + */ + uint8_t unuseduartPadding1[2]; /** * offset 212 */ @@ -981,48 +994,7 @@ struct board_configuration_s { * offset 344 */ sensor_chart_e sensorChartMode; - /** - * offset 348 - */ - maf_sensor_type_e mafSensorType; - /** - * todo:not finished - * These input pins allow us to pull toggle buttons state - * offset 352 - */ - brain_pin_e fsioDigitalInputs[FSIO_COMMAND_COUNT]; - /** - * offset 368 - */ - brain_input_pin_e vehicleSpeedSensorInputPin; - /** - * Some vehicles have a switch to indicate that clutch pedal is all the way up - * offset 369 - */ - switch_input_pin_e clutchUpPin; - /** - * offset 370 - */ - brain_input_pin_e frequencyReportingMapInputPin; - /** - * offset 371 - */ - pin_input_mode_e clutchUpPinMode; - /** - * offset 372 - */ - float etbIdleRange; - /** - offset 376 bit 0 */ - bool clutchUpPinInverted : 1; - /** - offset 376 bit 1 */ - bool clutchDownPinInverted : 1; - /** - * offset 380 - */ - int unusedAtBoardConfigurationEnd[121]; - /** total size 864*/ + /** total size 348*/ }; typedef struct board_configuration_s board_configuration_s; @@ -1086,10 +1058,10 @@ struct engine_configuration_s { bool cj125isLsu49 : 1; /** offset 76 bit 12 */ - bool etb1_use_two_wires : 1; + bool etb_use_two_wires : 1; /** offset 76 bit 13 */ - bool etb2_use_two_wires : 1; + bool unusedHereo_wires : 1; /** offset 76 bit 14 */ bool showSdCardWarning : 1; @@ -1145,7 +1117,6 @@ struct engine_configuration_s { bool issue_294_31 : 1; /** * Closed throttle. todo: extract these two fields into a structure - * todo: we need two sets of TPS parameters - modern ETBs have two sensors * See also tps1_1AdcChannel * set tps_min X * offset 80 @@ -1479,6 +1450,51 @@ struct engine_configuration_s { * offset 600 */ board_configuration_s bc; + /** + * offset 948 + */ + maf_sensor_type_e mafSensorType; + /** + * todo:not finished + * These input pins allow us to pull toggle buttons state + * offset 952 + */ + brain_pin_e fsioDigitalInputs[FSIO_COMMAND_COUNT]; + /** + * offset 968 + */ + brain_input_pin_e vehicleSpeedSensorInputPin; + /** + * Some vehicles have a switch to indicate that clutch pedal is all the way up + * offset 969 + */ + switch_input_pin_e clutchUpPin; + /** + * offset 970 + */ + brain_input_pin_e frequencyReportingMapInputPin; + /** + * offset 971 + */ + pin_input_mode_e clutchUpPinMode; + /** + * offset 972 + */ + float unused; + /** + offset 976 bit 0 */ + bool todoClutchUpPinInverted : 1; + /** + offset 976 bit 1 */ + bool todoClutchDownPinInverted : 1; + /** + * offset 980 + */ + etb_io etbIo[ETB_COUNT]; + /** + * offset 988 + */ + int unusedAtOldBoardConfigurationEnd[119]; /** offset 1464 bit 0 */ bool vvtDisplayInverted : 1; @@ -1692,8 +1708,9 @@ struct engine_configuration_s { offset 1476 bit 20 */ bool etbCalibrationOnStart : 1; /** + * This flag allows to use a special 'PID Multiplier' table (0.0-1.0) to compensate for nonlinear nature of IAC-RPM controller offset 1476 bit 21 */ - bool unused_1484_bit_21 : 1; + bool useIacPidMultTable : 1; /** offset 1476 bit 22 */ bool unused_1484_bit_22 : 1; @@ -1850,9 +1867,23 @@ struct engine_configuration_s { */ float alternator_antiwindupFreq; /** + * Closed throttle#2. todo: extract these two fields into a structure + * See also tps2_1AdcChannel + * set tps2_min X * offset 1768 */ - uint8_t unusedFormerWarmupAfrPid[8]; + int16_t tps2Min; + /** + * Full throttle#2. tpsMax value as 10 bit ADC value. Not Voltage! + * See also tps1_1AdcChannel + * set tps2_max X + * offset 1770 + */ + int16_t tps2Max; + /** + * offset 1772 + */ + uint8_t unusedFormerWarmupAfrPid[4]; /** * kPa value which is too low to be true * offset 1776 @@ -2524,7 +2555,7 @@ struct engine_configuration_s { /** * offset 3964 */ - etb_io etb2; + uint8_t unused1059[4]; /** * See useIdleTimingPidControl * offset 3968 @@ -2607,9 +2638,25 @@ struct engine_configuration_s { */ int alFIn[3]; /** + * Trigger comparator center point voltage * offset 4036 */ - uint8_t unusedSpiPadding3[4]; + uint8_t triggerCompCenterVolt; + /** + * Trigger comparator hysteresis voltage (Min) + * offset 4037 + */ + uint8_t triggerCompHystMin; + /** + * Trigger comparator hysteresis voltage (Max) + * offset 4038 + */ + uint8_t triggerCompHystMax; + /** + * VR-sensor saturation RPM + * offset 4039 + */ + uint8_t triggerCompSensorSatRpm; /** * offset 4040 */ @@ -2892,4 +2939,4 @@ typedef struct persistent_config_s persistent_config_s; #endif // end -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Nov 19 09:22:58 EST 2019 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sun Dec 08 00:34:44 EST 2019 diff --git a/firmware/controllers/generated/rusefi_generated.h b/firmware/controllers/generated/rusefi_generated.h index 9cb5dcfd84..39e6501f06 100644 --- a/firmware/controllers/generated/rusefi_generated.h +++ b/firmware/controllers/generated/rusefi_generated.h @@ -97,6 +97,8 @@ #define autoTuneTpsRocThreshold_offset_hex 978 #define AUX_DIGITAL_VALVE_COUNT 2 #define AUX_PID_COUNT 4 +#define auxFastSensor1_adcChannel_offset 680 +#define auxFastSensor1_adcChannel_offset_hex 2a8 #define auxPid1_dFactor_offset 2620 #define auxPid1_dFactor_offset_hex a3c #define auxPid1_iFactor_offset 2616 @@ -362,14 +364,10 @@ #define cltTimingExtra_offset_hex 950 #define clutchDownPin_offset 664 #define clutchDownPin_offset_hex 298 -#define clutchDownPinInverted_offset 976 -#define clutchDownPinInverted_offset_hex 3d0 #define clutchDownPinMode_offset 667 #define clutchDownPinMode_offset_hex 29b #define clutchUpPin_offset 969 #define clutchUpPin_offset_hex 3c9 -#define clutchUpPinInverted_offset 976 -#define clutchUpPinInverted_offset_hex 3d0 #define clutchUpPinMode_offset 971 #define clutchUpPinMode_offset_hex 3cb #define CMD_CALIBRATE_PEDAL_DOWN "calibrate_pedal_down" @@ -377,7 +375,9 @@ #define CMD_DATE "date" #define CMD_DISABLE "disable" #define CMD_ENABLE "enable" +#define CMD_ENGINE_TYPE "engine_type" #define CMD_ETB_DUTY "set_etb_duty" +#define CMD_PINS "pins" #define CMD_REBOOT "reboot" #define CMD_REBOOT_DFU "reboot_dfu" #define CMD_TRIGGER_HW_INPUT "trigger_hw_input" @@ -450,6 +450,8 @@ #define cylindersCount_offset 400 #define cylindersCount_offset_hex 190 #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", "Trigger Sync", "Electronic Throttle", "Executor", "Bench Test / TS commands", "Aux Valves", "Analog inputs #1", "INSTANT_RPM", "FSIO_EXPRESSION", "Status", "CJ125", "CAN", "MAP", "Metrics", "ETB#2", "Ion Sense", "TLE8888", "Analog inputs #2", "Dwell Metric", "Aux Temperature", "ETB Logic" +#define debugMapAveraging_offset 807 +#define debugMapAveraging_offset_hex 327 #define debugMode_offset 2092 #define debugMode_offset_hex 82c #define debugSetTimer_offset 806 @@ -508,31 +510,8 @@ #define engineSnifferRpmThreshold_offset_hex 4 #define engineType_offset 0 #define engineType_offset_hex 0 -#define etb1_controlPin1_offset 682 -#define etb1_controlPin1_offset_hex 2aa -#define etb1_controlPinMode_offset 683 -#define etb1_controlPinMode_offset_hex 2ab -#define etb1_directionPin1_offset 680 -#define etb1_directionPin1_offset_hex 2a8 -#define etb1_directionPin2_offset 681 -#define etb1_directionPin2_offset_hex 2a9 -#define etb1_offset 680 -#define etb1_offset_hex 2a8 -#define etb1_use_two_wires_offset 76 -#define etb1_use_two_wires_offset_hex 4c -#define etb2_controlPin1_offset 3966 -#define etb2_controlPin1_offset_hex f7e -#define etb2_controlPinMode_offset 3967 -#define etb2_controlPinMode_offset_hex f7f -#define etb2_directionPin1_offset 3964 -#define etb2_directionPin1_offset_hex f7c -#define etb2_directionPin2_offset 3965 -#define etb2_directionPin2_offset_hex f7d -#define etb2_offset 3964 -#define etb2_offset_hex f7c -#define etb2_use_two_wires_offset 76 -#define etb2_use_two_wires_offset_hex 4c #define ETB_BIAS_CURVE_LENGTH 8 +#define ETB_COUNT 2 #define etb_dFactor_offset 1744 #define etb_dFactor_offset_hex 6d0 #define etb_iFactor_offset 1740 @@ -553,6 +532,8 @@ #define etb_periodMs_offset_hex 6d6 #define etb_pFactor_offset 1736 #define etb_pFactor_offset_hex 6c8 +#define etb_use_two_wires_offset 76 +#define etb_use_two_wires_offset_hex 4c #define etbBiasBins_offset 3888 #define etbBiasBins_offset_hex f30 #define etbBiasValues_offset 3920 @@ -563,10 +544,28 @@ #define etbDeadband_offset_hex f78 #define etbFreq_offset 2514 #define etbFreq_offset_hex 9d2 -#define etbIdleRange_offset 972 -#define etbIdleRange_offset_hex 3cc #define etbIdleThrottleRange_offset 4012 #define etbIdleThrottleRange_offset_hex fac +#define etbIo1_controlPin1_offset 982 +#define etbIo1_controlPin1_offset_hex 3d6 +#define etbIo1_controlPinMode_offset 983 +#define etbIo1_controlPinMode_offset_hex 3d7 +#define etbIo1_directionPin1_offset 980 +#define etbIo1_directionPin1_offset_hex 3d4 +#define etbIo1_directionPin2_offset 981 +#define etbIo1_directionPin2_offset_hex 3d5 +#define etbIo1_offset 980 +#define etbIo1_offset_hex 3d4 +#define etbIo2_controlPin1_offset 986 +#define etbIo2_controlPin1_offset_hex 3da +#define etbIo2_controlPinMode_offset 987 +#define etbIo2_controlPinMode_offset_hex 3db +#define etbIo2_directionPin1_offset 984 +#define etbIo2_directionPin1_offset_hex 3d8 +#define etbIo2_directionPin2_offset 985 +#define etbIo2_directionPin2_offset_hex 3d9 +#define etbIo2_offset 984 +#define etbIo2_offset_hex 3d8 #define etbNeutralPosition_offset 1471 #define etbNeutralPosition_offset_hex 5bf #define externalKnockSenseAdc_offset 3103 @@ -1609,7 +1608,7 @@ #define sdCardSpiDevice_offset_hex a20 #define secondTriggerChannelEnabled_offset 1476 #define secondTriggerChannelEnabled_offset_hex 5c4 -#define sensor_chart_e_enum "none", "trigger", "MAP", "RPM ACCEL", "DETAILED RPM", "INVALID" +#define sensor_chart_e_enum "none", "trigger", "MAP", "RPM ACCEL", "DETAILED RPM", "Fast Aux1", "INVALID", "INVALID" #define sensorChartFrequency_offset 520 #define sensorChartFrequency_offset_hex 208 #define sensorChartMode_offset 944 @@ -1681,6 +1680,10 @@ #define spi3SckMode_offset_hex a2a #define spi3sckPin_offset 936 #define spi3sckPin_offset_hex 3a8 +#define starterRelayPin_offset 808 +#define starterRelayPin_offset_hex 328 +#define starterRelayPinMode_offset 809 +#define starterRelayPinMode_offset_hex 329 #define startOfCrankingPrimingPulse_offset 2032 #define startOfCrankingPrimingPulse_offset_hex 7f0 #define startUpFuelPumpDuration_offset 1892 @@ -1795,6 +1798,10 @@ #define tle8888_csPinMode_offset_hex c22 #define tle8888spiDevice_offset 4000 #define tle8888spiDevice_offset_hex fa0 +#define todoClutchDownPinInverted_offset 976 +#define todoClutchDownPinInverted_offset_hex 3d0 +#define todoClutchUpPinInverted_offset 976 +#define todoClutchUpPinInverted_offset_hex 3d0 #define TOP_DEAD_CENTER_MESSAGE "r" #define TOTAL_CONFIG_SIZE 20000 #define TOTAL_CONFIG_SIZE_hex 4e20 @@ -1802,6 +1809,10 @@ #define tps1_1AdcChannel_offset_hex 200 #define tps2_1AdcChannel_offset 515 #define tps2_1AdcChannel_offset_hex 203 +#define tps2Max_offset 1770 +#define tps2Max_offset_hex 6ea +#define tps2Min_offset 1768 +#define tps2Min_offset_hex 6e8 #define TPS_TPS_ACCEL_TABLE 8 #define tpsAccelEnrichmentThreshold_offset 2048 #define tpsAccelEnrichmentThreshold_offset_hex 800 @@ -1846,6 +1857,14 @@ #define trigger_unusedCustomNeedSecondTriggerInput_offset_hex 210 #define trigger_useOnlyFirstChannel_offset 528 #define trigger_useOnlyFirstChannel_offset_hex 210 +#define triggerCompCenterVolt_offset 4036 +#define triggerCompCenterVolt_offset_hex fc4 +#define triggerCompHystMax_offset 4038 +#define triggerCompHystMax_offset_hex fc6 +#define triggerCompHystMin_offset 4037 +#define triggerCompHystMin_offset_hex fc5 +#define triggerCompSensorSatRpm_offset 4039 +#define triggerCompSensorSatRpm_offset_hex fc7 #define triggerErrorPin_offset 828 #define triggerErrorPin_offset_hex 33c #define triggerErrorPinMode_offset 829 @@ -1892,10 +1911,12 @@ #define uartConsoleSerialSpeed_offset_hex 81c #define unrealisticRpmThreashold_offset 760 #define unrealisticRpmThreashold_offset_hex 2f8 +#define unused1059_offset 3964 +#define unused1059_offset_hex f7c #define unused1234234_offset 2042 #define unused1234234_offset_hex 7fa -#define unused_1484_bit_21_offset 1476 -#define unused_1484_bit_21_offset_hex 5c4 +#define unused556_offset 681 +#define unused556_offset_hex 2a9 #define unused_1484_bit_22_offset 1476 #define unused_1484_bit_22_offset_hex 5c4 #define unused_1484_bit_23_offset 1476 @@ -1920,22 +1941,22 @@ #define unused_board_984_31_offset_hex 2e8 #define unused_former_warmup_target_afr_offset 2096 #define unused_former_warmup_target_afr_offset_hex 830 +#define unused_offset 972 +#define unused_offset_hex 3cc #define unusedAnotherOne_offset 744 #define unusedAnotherOne_offset_hex 2e8 -#define unusedAtBoardConfigurationEnd_offset 980 -#define unusedAtBoardConfigurationEnd_offset_hex 3d4 +#define unusedAtOldBoardConfigurationEnd_offset 988 +#define unusedAtOldBoardConfigurationEnd_offset_hex 3dc #define unusedErrorPin_offset 2040 #define unusedErrorPin_offset_hex 7f8 #define unusedFlexFuelSensor_offset 3100 #define unusedFlexFuelSensor_offset_hex c1c -#define unusedFormerWarmupAfrPid_offset 1768 -#define unusedFormerWarmupAfrPid_offset_hex 6e8 +#define unusedFormerWarmupAfrPid_offset 1772 +#define unusedFormerWarmupAfrPid_offset_hex 6ec +#define unusedHereo_wires_offset 76 +#define unusedHereo_wires_offset_hex 4c #define unusedOldWarmupAfr_offset 744 #define unusedOldWarmupAfr_offset_hex 2e8 -#define unusedSpiPadding2_offset 807 -#define unusedSpiPadding2_offset_hex 327 -#define unusedSpiPadding3_offset 4036 -#define unusedSpiPadding3_offset_hex fc4 #define unusedSpiPadding4_offset 2593 #define unusedSpiPadding4_offset_hex a21 #define unusedSpiPadding5_offset 2713 @@ -1944,8 +1965,8 @@ #define unusedSpiPadding7_offset_hex fa5 #define unusedSpiPadding8_offset 4009 #define unusedSpiPadding8_offset_hex fa9 -#define unuseduartPadding1_offset 808 -#define unuseduartPadding1_offset_hex 328 +#define unuseduartPadding1_offset 810 +#define unuseduartPadding1_offset_hex 32a #define unusuedsw_offset 4020 #define unusuedsw_offset_hex fb4 #define unusuedvref_offset 4016 @@ -1984,6 +2005,8 @@ #define useFSIO8ForServo1_offset_hex 5b8 #define useFSIO9ForServo2_offset 1464 #define useFSIO9ForServo2_offset_hex 5b8 +#define useIacPidMultTable_offset 1476 +#define useIacPidMultTable_offset_hex 5c4 #define useIacTableForCoasting_offset 744 #define useIacTableForCoasting_offset_hex 2e8 #define useIdleTimingPidControl_offset 744 @@ -2037,6 +2060,7 @@ #define veRpmBins_offset_hex 4860 #define veTable_offset 17440 #define veTable_offset_hex 4420 +#define VOLTAGE_1_BYTE_PACKING_DIV 0.02 #define vRefAdcChannel_offset 1470 #define vRefAdcChannel_offset_hex 5be #define vvt_mode_e_enum "First half", "Second half", "2GZ", "Miata NB2", "mode4", "mode5", "mode6", "mode7" diff --git a/firmware/controllers/injector_central.cpp b/firmware/controllers/injector_central.cpp index 74bc56ecc9..5effd8280f 100644 --- a/firmware/controllers/injector_central.cpp +++ b/firmware/controllers/injector_central.cpp @@ -250,16 +250,6 @@ private: static BenchController instance; -void OutputPin::unregisterOutput(brain_pin_e oldPin, brain_pin_e newPin) { - if (oldPin != GPIO_UNASSIGNED && oldPin != newPin) { - scheduleMsg(logger, "unregistering %s", hwPortname(oldPin)); -#if EFI_GPIO_HARDWARE - brain_pin_markUnused(oldPin); - port = nullptr; -#endif /* EFI_GPIO_HARDWARE */ - } -} - static void handleCommandX14(uint16_t index) { switch (index) { case 1: diff --git a/firmware/controllers/math/engine_math.cpp b/firmware/controllers/math/engine_math.cpp index 83ce346b97..cca8c622ae 100644 --- a/firmware/controllers/math/engine_math.cpp +++ b/firmware/controllers/math/engine_math.cpp @@ -196,9 +196,7 @@ bool FuelSchedule::addFuelEventsForCylinder(int i DECLARE_ENGINE_PARAMETER_SUFF InjectionEvent *ev = &elements[i]; ev->ownIndex = i; -#if EFI_UNIT_TEST - ev->engine = engine; -#endif + INJECT_ENGINE_REFERENCE(ev); fixAngle(angle, "addFuel#1", CUSTOM_ERR_6554); ev->outputs[0] = output; @@ -206,14 +204,14 @@ bool FuelSchedule::addFuelEventsForCylinder(int i DECLARE_ENGINE_PARAMETER_SUFF ev->isSimultanious = isSimultanious; - if (TRIGGER_SHAPE(getSize()) < 1) { - warning(CUSTOM_ERR_NOT_INITIALIZED_TRIGGER, "uninitialized TriggerShape"); + 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); - TRIGGER_SHAPE(findTriggerPosition(&ev->injectionStart, angle PASS_CONFIG_PARAM(engineConfiguration->globalTriggerAngleOffset))); + 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 @@ -519,17 +517,17 @@ void prepareOutputSignals(DECLARE_ENGINE_PARAMETER_SIGNATURE) { prepareIgnitionPinIndices(CONFIG(ignitionMode) PASS_ENGINE_PARAMETER_SUFFIX); - TRIGGER_SHAPE(prepareShape()); + TRIGGER_WAVEFORM(prepareShape()); } #endif /* EFI_ENGINE_CONTROL */ void setFuelRpmBin(float from, float to DECLARE_CONFIG_PARAMETER_SUFFIX) { - setTableBin(config->fuelRpmBins, FUEL_RPM_COUNT, from, to); + setLinearCurve(config->fuelRpmBins, from, to); } void setFuelLoadBin(float from, float to DECLARE_CONFIG_PARAMETER_SUFFIX) { - setTableBin(config->fuelLoadBins, FUEL_LOAD_COUNT, from, to); + setLinearCurve(config->fuelLoadBins, from, to); } void setTimingRpmBin(float from, float to DECLARE_CONFIG_PARAMETER_SUFFIX) { @@ -537,7 +535,7 @@ void setTimingRpmBin(float from, float to DECLARE_CONFIG_PARAMETER_SUFFIX) { } void setTimingLoadBin(float from, float to DECLARE_CONFIG_PARAMETER_SUFFIX) { - setTableBin(config->ignitionLoadBins, IGN_LOAD_COUNT, from, to); + setLinearCurve(config->ignitionLoadBins, from, to); } /** @@ -548,11 +546,11 @@ void setAlgorithm(engine_load_mode_e algo DECLARE_CONFIG_PARAMETER_SUFFIX) { if (algo == LM_ALPHA_N) { setTimingLoadBin(20, 120 PASS_CONFIG_PARAMETER_SUFFIX); } else if (algo == LM_SPEED_DENSITY) { - setLinearCurve(config->ignitionLoadBins, IGN_LOAD_COUNT, 20, 120, 3); + setLinearCurve(config->ignitionLoadBins, 20, 120, 3); buildTimingMap(35 PASS_CONFIG_PARAMETER_SUFFIX); } } void setFlatInjectorLag(float value DECLARE_CONFIG_PARAMETER_SUFFIX) { - setArrayValues(engineConfiguration->injector.battLagCorr, VBAT_INJECTOR_CURVE_SIZE, value); + setArrayValues(engineConfiguration->injector.battLagCorr, value); } diff --git a/firmware/controllers/math/engine_math.h b/firmware/controllers/math/engine_math.h index e66f7521ea..36e8b6081d 100644 --- a/firmware/controllers/math/engine_math.h +++ b/firmware/controllers/math/engine_math.h @@ -67,4 +67,4 @@ void setSingleCoilDwell(DECLARE_CONFIG_PARAMETER_SIGNATURE); // expectation is that for well-known triggers CONFIG(globalTriggerAngleOffset) would usually be zero // while for toothed wheels user would have to provide a value #define tdcPosition() \ - (TRIGGER_SHAPE(tdcPosition) + CONFIG(globalTriggerAngleOffset)) + (TRIGGER_WAVEFORM(tdcPosition) + CONFIG(globalTriggerAngleOffset)) diff --git a/firmware/controllers/math/speed_density.cpp b/firmware/controllers/math/speed_density.cpp index 6c84f32bb6..4d51d99229 100644 --- a/firmware/controllers/math/speed_density.cpp +++ b/firmware/controllers/math/speed_density.cpp @@ -174,14 +174,14 @@ void setDefaultVETable(DECLARE_ENGINE_PARAMETER_SIGNATURE) { veMap.setAll(80); // setRpmTableBin(engineConfiguration->ve2RpmBins, FUEL_RPM_COUNT); -// setLinearCurve(engineConfiguration->ve2LoadBins, FUEL_LOAD_COUNT, 10, 300, 1); +// setLinearCurve(engineConfiguration->ve2LoadBins, 10, 300, 1); // ve2Map.setAll(0.81); setRpmTableBin(config->afrRpmBins, FUEL_RPM_COUNT); afrMap.setAll(14.7); setRpmTableBin(engineConfiguration->baroCorrRpmBins, BARO_CORR_SIZE); - setLinearCurve(engineConfiguration->baroCorrPressureBins, BARO_CORR_SIZE, 75, 105, 1); + setLinearCurve(engineConfiguration->baroCorrPressureBins, 75, 105, 1); for (int i = 0; i < BARO_CORR_SIZE;i++) { for (int j = 0; j < BARO_CORR_SIZE;j++) { // Default baro table is all 1.0, we can't recommend a reasonable default here diff --git a/firmware/controllers/sensors/map.cpp b/firmware/controllers/sensors/map.cpp index d32af37c33..22e4deb748 100644 --- a/firmware/controllers/sensors/map.cpp +++ b/firmware/controllers/sensors/map.cpp @@ -225,7 +225,7 @@ static void printMAPInfo(void) { if (engineConfiguration->hasFrequencyReportingMapSensor) { - scheduleMsg(logger, "instant value=%.2fHz @ %s", mapFreq, hwPortname(CONFIGB(frequencyReportingMapInputPin))); + scheduleMsg(logger, "instant value=%.2fHz @ %s", mapFreq, hwPortname(CONFIG(frequencyReportingMapInputPin))); } else { scheduleMsg(logger, "map type=%d/%s MAP=%.2fkPa mapMinBufferLength=%d", engineConfiguration->map.sensor.type, getAir_pressure_sensor_type_e(engineConfiguration->map.sensor.type), @@ -268,14 +268,14 @@ void initMapDecoder(Logging *sharedLogger DECLARE_ENGINE_PARAMETER_SUFFIX) { if (engineConfiguration->hasFrequencyReportingMapSensor) { #if HAL_USE_ICU - digital_input_s* digitalMapInput = startDigitalCapture("MAP freq", CONFIGB(frequencyReportingMapInputPin), true); + digital_input_s* digitalMapInput = startDigitalCapture("MAP freq", CONFIG(frequencyReportingMapInputPin), true); digitalMapInput->setWidthCallback((VoidInt) digitalMapWidthCallback, NULL); #else #if EFI_PROD_CODE efiExtiEnablePin( "Frequency MAP", - CONFIGB(frequencyReportingMapInputPin), + CONFIG(frequencyReportingMapInputPin), PAL_EVENT_MODE_RISING_EDGE, (palcallback_t)digitalMapWidthCallback, nullptr diff --git a/firmware/controllers/sensors/map.h b/firmware/controllers/sensors/map.h index 17515981b7..8c9c6ab283 100644 --- a/firmware/controllers/sensors/map.h +++ b/firmware/controllers/sensors/map.h @@ -26,10 +26,10 @@ float getMapByVoltage(float voltage DECLARE_ENGINE_PARAMETER_SUFFIX); float decodePressure(float voltage, air_pressure_sensor_config_s * mapConfig DECLARE_ENGINE_PARAMETER_SUFFIX); float validateMap(float mapKPa DECLARE_ENGINE_PARAMETER_SUFFIX); -#define KPA_PER_PSI 6.89475728 +#define KPA_PER_PSI 6.89475728f // PSI (relative to atmosphere) to kPa (relative to vacuum) -#define PSI2KPA(psi) (101.32500411216164 + KPA_PER_PSI * (psi)) +#define PSI2KPA(psi) (101.32500411216164f + KPA_PER_PSI * (psi)) #define INHG2KPA(inhg) ((inhg) * 3.386375) #define KPA2INHG(kpa) ((kpa) / 3.386375) diff --git a/firmware/controllers/sensors/tps.cpp b/firmware/controllers/sensors/tps.cpp index 96878731e4..4ded0610bc 100644 --- a/firmware/controllers/sensors/tps.cpp +++ b/firmware/controllers/sensors/tps.cpp @@ -141,7 +141,7 @@ float getTPSVoltage(DECLARE_ENGINE_PARAMETER_SIGNATURE) { * We need ADC value because TunerStudio has a nice TPS configuration wizard, and this wizard * wants a TPS value. */ -int getTPS12bitAdc(DECLARE_ENGINE_PARAMETER_SIGNATURE) { +int getTPS12bitAdc(int index DECLARE_ENGINE_PARAMETER_SUFFIX) { #if !EFI_PROD_CODE if (engine->mockTpsAdcValue != MOCK_UNDEFINED) { return engine->mockTpsAdcValue; @@ -151,7 +151,11 @@ int getTPS12bitAdc(DECLARE_ENGINE_PARAMETER_SIGNATURE) { return -1; #if EFI_PROD_CODE - return getAdcValue("tps10", engineConfiguration->tps1_1AdcChannel); + if (index == 0) { + return getAdcValue("tps10", engineConfiguration->tps1_1AdcChannel); + } else { + return getAdcValue("tps20", engineConfiguration->tps2_1AdcChannel); + } // return tpsFastAdc / 4; #else return 0; @@ -193,8 +197,8 @@ void grabPedalIsWideOpen() { /** * @brief Position on physical primary TPS */ -static percent_t getPrimatyRawTPS(DECLARE_ENGINE_PARAMETER_SIGNATURE) { - percent_t tpsValue = getTpsValue(getTPS12bitAdc(PASS_ENGINE_PARAMETER_SIGNATURE) PASS_ENGINE_PARAMETER_SUFFIX); +static percent_t getPrimatyRawTPS(int index DECLARE_ENGINE_PARAMETER_SUFFIX) { + percent_t tpsValue = getTpsValue(getTPS12bitAdc(index PASS_ENGINE_PARAMETER_SUFFIX) PASS_ENGINE_PARAMETER_SUFFIX); return tpsValue; } @@ -222,7 +226,7 @@ bool hasTpsSensor(DECLARE_ENGINE_PARAMETER_SIGNATURE) { return engineConfiguration->tps1_1AdcChannel != EFI_ADC_NONE; } -percent_t getTPS(DECLARE_ENGINE_PARAMETER_SIGNATURE) { +percent_t getTPSWithIndex(int index DECLARE_ENGINE_PARAMETER_SUFFIX) { #if !EFI_PROD_CODE if (!cisnan(engine->mockTpsValue)) { return engine->mockTpsValue; @@ -234,7 +238,11 @@ percent_t getTPS(DECLARE_ENGINE_PARAMETER_SIGNATURE) { // todo: blah blah // todo: if two TPS do not match - show OBD code via malfunction_central.c - return getPrimatyRawTPS(PASS_ENGINE_PARAMETER_SIGNATURE); + return getPrimatyRawTPS(index PASS_ENGINE_PARAMETER_SUFFIX); +} + +percent_t getTPS(DECLARE_ENGINE_PARAMETER_SIGNATURE) { + return getTPSWithIndex(0 PASS_ENGINE_PARAMETER_SUFFIX); } void setBosch0280750009(DECLARE_ENGINE_PARAMETER_SIGNATURE) { diff --git a/firmware/controllers/sensors/tps.h b/firmware/controllers/sensors/tps.h index 3e4503aa9f..cd12176012 100644 --- a/firmware/controllers/sensors/tps.h +++ b/firmware/controllers/sensors/tps.h @@ -24,10 +24,11 @@ percent_t getPedalPosition(DECLARE_ENGINE_PARAMETER_SIGNATURE); * @return Current TPS position, percent of WOT. 0 means idle and 100 means Wide Open Throttle */ percent_t getTPS(DECLARE_ENGINE_PARAMETER_SIGNATURE); +percent_t getTPSWithIndex(int index DECLARE_ENGINE_PARAMETER_SUFFIX); bool hasTpsSensor(DECLARE_ENGINE_PARAMETER_SIGNATURE); int convertVoltageTo10bitADC(float voltage); -int getTPS12bitAdc(DECLARE_ENGINE_PARAMETER_SIGNATURE); -#define getTPS10bitAdc() (getTPS12bitAdc() / TPS_TS_CONVERSION) +int getTPS12bitAdc(int index DECLARE_ENGINE_PARAMETER_SUFFIX); +#define getTPS10bitAdc() (getTPS12bitAdc(0 PASS_ENGINE_PARAMETER_SUFFIX) / TPS_TS_CONVERSION) float getTPSVoltage(DECLARE_ENGINE_PARAMETER_SIGNATURE); percent_t getTpsValue(int adc DECLARE_ENGINE_PARAMETER_SUFFIX); void setBosch0280750009(DECLARE_ENGINE_PARAMETER_SIGNATURE); diff --git a/firmware/controllers/settings.cpp b/firmware/controllers/settings.cpp index 964bc8727b..bf82370028 100644 --- a/firmware/controllers/settings.cpp +++ b/firmware/controllers/settings.cpp @@ -115,6 +115,9 @@ static void printOutputs(const engine_configuration_s *engineConfiguration) { scheduleMsg(&logger, "mainRelay: mode %s @ %s", getPin_output_mode_e(boardConfiguration->mainRelayPinMode), hwPortname(boardConfiguration->mainRelayPin)); + scheduleMsg(&logger, "starterRelay: mode %s @ %s", getPin_output_mode_e(boardConfiguration->starterRelayPinMode), + hwPortname(boardConfiguration->starterRelayPin)); + scheduleMsg(&logger, "alternator field: mode %s @ %s", getPin_output_mode_e(boardConfiguration->alternatorControlPinMode), hwPortname(boardConfiguration->alternatorControlPin)); @@ -278,7 +281,7 @@ void printConfiguration(const engine_configuration_s *engineConfiguration) { boolToString(engineConfiguration->isManualSpinningMode), boolToString(engineConfiguration->isCylinderCleanupEnabled)); - scheduleMsg(&logger, "clutchUp@%s: %s", hwPortname(boardConfiguration->clutchUpPin), + scheduleMsg(&logger, "clutchUp@%s: %s", hwPortname(engineConfiguration->clutchUpPin), boolToString(engine->clutchUpState)); scheduleMsg(&logger, "clutchDown@%s: %s", hwPortname(boardConfiguration->clutchDownPin), boolToString(engine->clutchDownState)); @@ -568,7 +571,7 @@ static void setToothedWheel(int total, int skipped DECLARE_ENGINE_PARAMETER_SUFF scheduleMsg(&logger, "toothed: total=%d/skipped=%d", total, skipped); setToothedWheelConfiguration(&engine->triggerCentral.triggerShape, total, skipped, engineConfiguration->ambiguousOperationMode); -// initializeTriggerShape(&logger, engineConfiguration, engineConfiguration2); +// initializeTriggerWaveform(&logger, engineConfiguration, engineConfiguration2); incrementGlobalConfigurationVersion(PASS_ENGINE_PARAMETER_SIGNATURE); doPrintConfiguration(); } @@ -696,6 +699,10 @@ static void setMainRelayPin(const char *pinName) { setIndividualPin(pinName, &boardConfiguration->mainRelayPin, "main relay"); } +static void setStarterRelayPin(const char *pinName) { + setIndividualPin(pinName, &boardConfiguration->starterRelayPin, "starter relay"); +} + static void setAlternatorPin(const char *pinName) { setIndividualPin(pinName, &boardConfiguration->alternatorControlPin, "alternator"); } @@ -811,7 +818,10 @@ static void setAnalogInputPin(const char *sensorStr, const char *pinName) { scheduleMsg(&logger, "setting IAT to %s/%d", pinName, channel); } else if (strEqual("tps", sensorStr)) { engineConfiguration->tps1_1AdcChannel = channel; - scheduleMsg(&logger, "setting TPS to %s/%d", pinName, channel); + scheduleMsg(&logger, "setting TPS1 to %s/%d", pinName, channel); + } else if (strEqual("tps2", sensorStr)) { + engineConfiguration->tps2_1AdcChannel = channel; + scheduleMsg(&logger, "setting TPS2 to %s/%d", pinName, channel); } incrementGlobalConfigurationVersion(PASS_ENGINE_PARAMETER_SIGNATURE); } @@ -969,7 +979,7 @@ static void enableOrDisable(const char *param, bool isEnabled) { engineConfiguration->isMapAveragingEnabled = isEnabled; } else if (strEqualCaseInsensitive(param, "tunerstudio")) { engineConfiguration->isTunerStudioEnabled = isEnabled; - } else if (strEqualCaseInsensitive(param, "wave_analyzer")) { + } else if (strEqualCaseInsensitive(param, "logic_analyzer")) { engineConfiguration->isWaveAnalyzerEnabled = isEnabled; } else if (strEqualCaseInsensitive(param, "manual_spinning")) { engineConfiguration->isManualSpinningMode = isEnabled; @@ -1146,11 +1156,11 @@ static void getValue(const char *paramStr) { } static void setFsioCurve1Value(float value) { - setLinearCurve(engineConfiguration->fsioCurve1, FSIO_CURVE_16, value, value, 1); + setLinearCurve(engineConfiguration->fsioCurve1, value, value, 1); } static void setFsioCurve2Value(float value) { - setLinearCurve(engineConfiguration->fsioCurve2, FSIO_CURVE_16, value, value, 1); + setLinearCurve(engineConfiguration->fsioCurve2, value, value, 1); } typedef struct { @@ -1242,7 +1252,7 @@ const command_i_s commandsI[] = {{"ignition_mode", setIgnitionMode}, {"tpsErrorDetectionTooHigh", setTpsErrorDetectionTooHigh}, {"fixed_mode_timing", setFixedModeTiming}, {"timing_mode", setTimingMode}, - {"engine_type", setEngineType}, + {CMD_ENGINE_TYPE, setEngineType}, {"rpm_hard_limit", setRpmHardLimit}, {"firing_order", setFiringOrder}, {"algorithm", setAlgorithmInt}, @@ -1431,6 +1441,7 @@ void initSettings(void) { addConsoleActionS("set_alternator_pin", setAlternatorPin); addConsoleActionS("set_idle_pin", setIdlePin); addConsoleActionS("set_main_relay_pin", setMainRelayPin); + addConsoleActionS("set_starter_relay_pin", setStarterRelayPin); #if HAL_USE_ADC addConsoleActionSS("set_analog_input_pin", setAnalogInputPin); diff --git a/firmware/controllers/system/dc_motor.cpp b/firmware/controllers/system/dc_motor.cpp index 4dbc6959c7..2b3db71ef8 100644 --- a/firmware/controllers/system/dc_motor.cpp +++ b/firmware/controllers/system/dc_motor.cpp @@ -7,6 +7,7 @@ */ #include "dc_motor.h" +#include "pwm_generator_logic.h" TwoPinDcMotor::TwoPinDcMotor(SimplePwm* enable, SimplePwm* dir1, SimplePwm* dir2) : m_enable(enable) @@ -19,14 +20,14 @@ bool TwoPinDcMotor::isOpenDirection() const { return m_value >= 0; } -float TwoPinDcMotor::Get() const { +float TwoPinDcMotor::get() const { return m_value; } /** * @param duty value between -1.0 and 1.0 */ -bool TwoPinDcMotor::Set(float duty) +bool TwoPinDcMotor::set(float duty) { m_value = duty; diff --git a/firmware/controllers/system/dc_motor.h b/firmware/controllers/system/dc_motor.h index 8c6722b123..4bcf221b54 100644 --- a/firmware/controllers/system/dc_motor.h +++ b/firmware/controllers/system/dc_motor.h @@ -7,8 +7,6 @@ #pragma once -#include "pwm_generator_logic.h" - /** * @brief Brushed or brushless DC motor interface * @@ -23,9 +21,19 @@ public: * @param duty +1.0f represents full power forward, and -1.0f represents full power backward. * @return True if any fault was detected driving the motor, and false if successful. */ - virtual bool Set(float duty) = 0; + virtual bool set(float duty) = 0; + + /** + * @brief Get the current motor duty cycle. + * @return The current duty cycle setting. +1.0f represents full power forward, and -1.0f represents full power backward. + */ + virtual float get() const = 0; + + virtual bool isOpenDirection() const = 0; }; +class SimplePwm; + /** * @brief Represents a DC motor controller (H bridge) with one pin for enable (PWM), * and two pins for direction control. @@ -70,9 +78,9 @@ public: */ TwoPinDcMotor(SimplePwm* enable, SimplePwm* dir1, SimplePwm* dir2); - virtual bool Set(float duty) override; - float Get() const; - bool isOpenDirection() const; + virtual bool set(float duty) override; + float get() const override; + bool isOpenDirection() const override; - void SetType(ControlType type) { m_type = type; } + void setType(ControlType type) { m_type = type; } }; diff --git a/firmware/controllers/system/efi_gpio.cpp b/firmware/controllers/system/efi_gpio.cpp index ff31a5afbe..3616753985 100644 --- a/firmware/controllers/system/efi_gpio.cpp +++ b/firmware/controllers/system/efi_gpio.cpp @@ -30,7 +30,7 @@ extern WaveChart waveChart; // todo: clean this mess, this should become 'static'/private EnginePins enginePins; -extern LoggingWithStorage sharedLogger; +static Logging* logger; pin_output_mode_e DEFAULT_OUTPUT = OM_DEFAULT; @@ -85,6 +85,18 @@ EnginePins::EnginePins() { } \ } +#define unregisterOutputIfPinChanged(output, pin) { \ + if (isConfigurationChanged(pin)) { \ + (output).unregisterOutput(activeConfiguration.pin); \ + } \ +} + +#define unregisterOutputIfPinOrModeChanged(output, pin, mode) { \ + if (isPinOrModeChanged(pin, mode)) { \ + (output).unregisterOutput(activeConfiguration.pin); \ + } \ +} + #else /* EFI_PROD_CODE */ #define setPinValue(outputPin, electricalValue, logicValue) \ @@ -114,37 +126,25 @@ void EnginePins::unregisterPins() { unregisterEtbPins(); #endif /* EFI_ELECTRONIC_THROTTLE_BODY */ #if EFI_PROD_CODE - fuelPumpRelay.unregisterOutput(activeConfiguration.bc.fuelPumpPin, engineConfiguration->bc.fuelPumpPin); - fanRelay.unregisterOutput(activeConfiguration.bc.fanPin, engineConfiguration->bc.fanPin); - acRelay.unregisterOutput(activeConfiguration.bc.acRelayPin, engineConfiguration->bc.acRelayPin); - hipCs.unregisterOutput(activeConfiguration.bc.hip9011CsPin, engineConfiguration->bc.hip9011CsPin); - triggerDecoderErrorPin.unregisterOutput(activeConfiguration.bc.triggerErrorPin, - engineConfiguration->bc.triggerErrorPin); - - sdCsPin.unregisterOutput(activeConfiguration.bc.sdCardCsPin, engineConfiguration->bc.sdCardCsPin); - accelerometerCs.unregisterOutput(activeConfiguration.LIS302DLCsPin, engineConfiguration->LIS302DLCsPin); -// etbOutput1.unregisterOutput(activeConfiguration.bc.etb1.directionPin1, -// engineConfiguration->bc.etb1.directionPin1); -// etbOutput2.unregisterOutput(activeConfiguration.bc.etb1.directionPin2, -// engineConfiguration->bc.etb1.directionPin2); - checkEnginePin.unregisterOutput(activeConfiguration.bc.malfunctionIndicatorPin, - engineConfiguration->bc.malfunctionIndicatorPin); - dizzyOutput.unregisterOutput(activeConfiguration.dizzySparkOutputPin, - engineConfiguration->dizzySparkOutputPin); - tachOut.unregisterOutput(activeConfiguration.bc.tachOutputPin, - engineConfiguration->bc.tachOutputPin); - idleSolenoidPin.unregisterOutput(activeConfiguration.bc.idle.solenoidPin, - engineConfiguration->bc.idle.solenoidPin); + unregisterOutputIfPinOrModeChanged(fuelPumpRelay, bc.fuelPumpPin, bc.fuelPumpPinMode); + unregisterOutputIfPinOrModeChanged(fanRelay, bc.fanPin, bc.fanPinMode); + unregisterOutputIfPinOrModeChanged(acRelay, bc.acRelayPin, bc.acRelayPinMode); + unregisterOutputIfPinOrModeChanged(hipCs, bc.hip9011CsPin, bc.hip9011CsPinMode); + unregisterOutputIfPinOrModeChanged(triggerDecoderErrorPin, bc.triggerErrorPin, bc.triggerErrorPinMode); + unregisterOutputIfPinOrModeChanged(checkEnginePin, bc.malfunctionIndicatorPin, bc.malfunctionIndicatorPinMode); + unregisterOutputIfPinOrModeChanged(dizzyOutput, dizzySparkOutputPin, dizzySparkOutputPinMode); + unregisterOutputIfPinOrModeChanged(tachOut, bc.tachOutputPin, bc.tachOutputPinMode); + unregisterOutputIfPinOrModeChanged(idleSolenoidPin, bc.idle.solenoidPin, bc.idle.solenoidPinMode); + unregisterOutputIfPinChanged(sdCsPin, bc.sdCardCsPin); + unregisterOutputIfPinChanged(accelerometerCs, LIS302DLCsPin); for (int i = 0;i < FSIO_COMMAND_COUNT;i++) { - fsioOutputs[i].unregisterOutput(activeConfiguration.bc.fsioOutputPins[i], - engineConfiguration->bc.fsioOutputPins[i]); + unregisterOutputIfPinChanged(fsioOutputs[i], bc.fsioOutputPins[i]); } - alternatorPin.unregisterOutput(activeConfiguration.bc.alternatorControlPin, - engineConfiguration->bc.alternatorControlPin); - mainRelay.unregisterOutput(activeConfiguration.bc.mainRelayPin, - engineConfiguration->bc.mainRelayPin); + unregisterOutputIfPinOrModeChanged(alternatorPin, bc.alternatorControlPin, bc.alternatorControlPinMode); + unregisterOutputIfPinOrModeChanged(mainRelay, bc.mainRelayPin, bc.mainRelayPinMode); + unregisterOutputIfPinOrModeChanged(starterRelay, bc.starterRelayPin, bc.starterRelayPinMode); #endif /* EFI_PROD_CODE */ } @@ -161,9 +161,7 @@ void EnginePins::reset() { void EnginePins::stopIgnitionPins(void) { #if EFI_PROD_CODE for (int i = 0; i < IGNITION_PIN_COUNT; i++) { - NamedOutputPin *output = &enginePins.coils[i]; - output->unregisterOutput(activeConfiguration.bc.ignitionPins[i], - engineConfiguration->bc.ignitionPins[i]); + unregisterOutputIfPinOrModeChanged(enginePins.coils[i], bc.ignitionPins[i], bc.ignitionPinMode); } #endif /* EFI_PROD_CODE */ } @@ -171,9 +169,7 @@ void EnginePins::stopIgnitionPins(void) { void EnginePins::stopInjectionPins(void) { #if EFI_PROD_CODE for (int i = 0; i < INJECTION_PIN_COUNT; i++) { - NamedOutputPin *output = &enginePins.injectors[i]; - output->unregisterOutput(activeConfiguration.bc.injectionPins[i], - engineConfiguration->bc.injectionPins[i]); + unregisterOutputIfPinOrModeChanged(enginePins.injectors[i], bc.injectionPins[i], bc.injectionPinMode); } #endif /* EFI_PROD_CODE */ } @@ -191,13 +187,11 @@ void EnginePins::startIgnitionPins(void) { #if EFI_PROD_CODE for (int i = 0; i < engineConfiguration->specs.cylindersCount; i++) { NamedOutputPin *output = &enginePins.coils[i]; - // todo: we need to check if mode has changed - if (isConfigurationChanged(bc.ignitionPins[i])) { + if (isPinOrModeChanged(bc.ignitionPins[i], bc.ignitionPinMode)) { output->initPin(output->name, CONFIGB(ignitionPins)[i], &CONFIGB(ignitionPinMode)); } } - // todo: we need to check if mode has changed - if (isConfigurationChanged(dizzySparkOutputPin)) { + if (isPinOrModeChanged(dizzySparkOutputPin, dizzySparkOutputPinMode)) { enginePins.dizzyOutput.initPin("dizzy tach", engineConfiguration->dizzySparkOutputPin, &engineConfiguration->dizzySparkOutputPinMode); @@ -210,9 +204,7 @@ void EnginePins::startInjectionPins(void) { // todo: should we move this code closer to the injection logic? for (int i = 0; i < engineConfiguration->specs.cylindersCount; i++) { NamedOutputPin *output = &enginePins.injectors[i]; - // todo: we need to check if mode has changed - if (engineConfiguration->bc.injectionPins[i] != activeConfiguration.bc.injectionPins[i]) { - + if (isPinOrModeChanged(bc.injectionPins[i], bc.injectionPinMode)) { output->initPin(output->name, CONFIGB(injectionPins)[i], &CONFIGB(injectionPinMode)); } @@ -273,7 +265,7 @@ bool NamedOutputPin::stop() { #if EFI_GPIO_HARDWARE if (isInitialized() && getLogicValue()) { setValue(false); - scheduleMsg(&sharedLogger, "turning off %s", name); + scheduleMsg(logger, "turning off %s", name); return true; } #endif /* EFI_GPIO_HARDWARE */ @@ -383,6 +375,7 @@ void initOutputPins(DECLARE_ENGINE_PARAMETER_SIGNATURE) { enginePins.fuelPumpRelay.initPin("fuel pump relay", CONFIGB(fuelPumpPin), &CONFIGB(fuelPumpPinMode)); enginePins.mainRelay.initPin("main relay", CONFIGB(mainRelayPin), &CONFIGB(mainRelayPinMode)); + enginePins.starterRelay.initPin("starter relay", CONFIGB(starterRelayPin), &CONFIGB(starterRelayPinMode)); enginePins.fanRelay.initPin("fan relay", CONFIGB(fanPin), &CONFIGB(fanPinMode)); enginePins.o2heater.initPin("o2 heater", CONFIGB(o2heaterPin)); @@ -481,6 +474,16 @@ void OutputPin::initPin(const char *msg, brain_pin_e brainPin, const pin_output_ #endif /* EFI_GPIO_HARDWARE */ } +void OutputPin::unregisterOutput(brain_pin_e oldPin) { + if (oldPin != GPIO_UNASSIGNED) { + scheduleMsg(logger, "unregistering %s", hwPortname(oldPin)); +#if EFI_GPIO_HARDWARE && EFI_PROD_CODE + brain_pin_markUnused(oldPin); + port = nullptr; +#endif /* EFI_GPIO_HARDWARE */ + } +} + #if EFI_GPIO_HARDWARE // questionable trick: we avoid using 'getHwPort' and 'getHwPin' in case of errors in order to increase the changes of turning the LED @@ -488,7 +491,8 @@ void OutputPin::initPin(const char *msg, brain_pin_e brainPin, const pin_output_ ioportid_t errorLedPort; ioportmask_t errorLedPin; -void initPrimaryPins(void) { +void initPrimaryPins(Logging *sharedLogger) { + logger = sharedLogger; #if EFI_PROD_CODE enginePins.errorLedPin.initPin("led: ERROR status", LED_ERROR_BRAIN_PIN); errorLedPort = getHwPort("primary", LED_ERROR_BRAIN_PIN); diff --git a/firmware/controllers/system/efi_gpio.h b/firmware/controllers/system/efi_gpio.h index fd919abd0c..e1b60f3c12 100644 --- a/firmware/controllers/system/efi_gpio.h +++ b/firmware/controllers/system/efi_gpio.h @@ -13,7 +13,7 @@ #include "io_pins.h" #include "engine_configuration.h" -void initPrimaryPins(void); +void initPrimaryPins(Logging *sharedLogger); void initOutputPins(DECLARE_ENGINE_PARAMETER_SIGNATURE); #if EFI_GPIO_HARDWARE @@ -41,7 +41,7 @@ public: /** * dissociates pin from this output and un-registers it in pin repository */ - void unregisterOutput(brain_pin_e oldPin, brain_pin_e newPin); + void unregisterOutput(brain_pin_e oldPin); bool isInitialized(); @@ -124,6 +124,7 @@ public: void stopInjectionPins(); void stopIgnitionPins(); OutputPin mainRelay; + OutputPin starterRelay; OutputPin fanRelay; // see acRelayPin OutputPin acRelay; diff --git a/firmware/controllers/scheduling/event_queue.cpp b/firmware/controllers/system/timer/event_queue.cpp similarity index 82% rename from firmware/controllers/scheduling/event_queue.cpp rename to firmware/controllers/system/timer/event_queue.cpp index d39cba69b5..47260cb044 100644 --- a/firmware/controllers/scheduling/event_queue.cpp +++ b/firmware/controllers/system/timer/event_queue.cpp @@ -30,7 +30,7 @@ EventQueue::EventQueue() { } bool EventQueue::checkIfPending(scheduling_s *scheduling) { - return assertNotInList(head, scheduling); + assertNotInListMethodBody(scheduling_s, head, scheduling, nextScheduling_s); } /** @@ -57,13 +57,12 @@ bool EventQueue::insertTask(scheduling_s *scheduling, efitime_t timeX, schfunc_t } scheduling->momentX = timeX; - scheduling->callback = callback; - scheduling->param = param; + scheduling->action.setAction(callback, param); scheduling->isScheduled = true; if (head == NULL || timeX < head->momentX) { // here we insert into head of the linked list - LL_PREPEND(head, scheduling); + LL_PREPEND2(head, scheduling, nextScheduling_s); #if EFI_UNIT_TEST assertListIsSorted(); #endif /* EFI_UNIT_TEST */ @@ -71,12 +70,12 @@ bool EventQueue::insertTask(scheduling_s *scheduling, efitime_t timeX, schfunc_t } else { // here we know we are not in the head of the list, let's find the position - linear search scheduling_s *insertPosition = head; - while (insertPosition->next != NULL && insertPosition->next->momentX < timeX) { - insertPosition = insertPosition->next; + while (insertPosition->nextScheduling_s != NULL && insertPosition->nextScheduling_s->momentX < timeX) { + insertPosition = insertPosition->nextScheduling_s; } - scheduling->next = insertPosition->next; - insertPosition->next = scheduling; + scheduling->nextScheduling_s = insertPosition->nextScheduling_s; + insertPosition->nextScheduling_s = scheduling; #if EFI_UNIT_TEST assertListIsSorted(); #endif /* EFI_UNIT_TEST */ @@ -132,9 +131,8 @@ int EventQueue::executeAll(efitime_t now) { int listIterationCounter = 0; int executionCounter = 0; // we need safe iteration because we are removing elements inside the loop - LL_FOREACH_SAFE(head, current, tmp) + LL_FOREACH_SAFE2(head, current, tmp, nextScheduling_s) { - efiAssert(CUSTOM_ERR_ASSERT, current->callback != NULL, "callback==null1", 0); if (++listIterationCounter > QUEUE_LENGTH_LIMIT) { firmwareError(CUSTOM_LIST_LOOP, "Is this list looped?"); return false; @@ -143,14 +141,14 @@ int EventQueue::executeAll(efitime_t now) { executionCounter++; efiAssert(CUSTOM_ERR_ASSERT, head == current, "removing from head", -1); //LL_DELETE(head, current); - head = head->next; + head = head->nextScheduling_s; if (executionList == NULL) { lastInExecutionList = executionList = current; } else { - lastInExecutionList->next = current; + lastInExecutionList->nextScheduling_s = current; lastInExecutionList = current; } - current->next = nullptr; + current->nextScheduling_s = nullptr; } else { /** * The list is sorted. Once we find one action in the future, all the remaining ones @@ -167,20 +165,18 @@ int EventQueue::executeAll(efitime_t now) { * we need safe iteration here because 'callback' might change change 'current->next' * while re-inserting it into the queue from within the callback */ - LL_FOREACH_SAFE(executionList, current, tmp) - { - efiAssert(CUSTOM_ERR_ASSERT, current->callback != NULL, "callback==null2", 0); + LL_FOREACH_SAFE2(executionList, current, tmp, nextScheduling_s) { uint32_t before = getTimeNowLowerNt(); current->isScheduled = false; uint32_t howFarOff = now - current->momentX; maxSchedulingPrecisionLoss = maxI(maxSchedulingPrecisionLoss, howFarOff); #if EFI_UNIT_TEST - printf("QUEUE: execute current=%d param=%d\r\n", (long)current, (long)current->param); + printf("QUEUE: execute current=%d param=%d\r\n", (long)current, (long)current->action.getArgument()); #endif { ScopePerf perf2(PE::EventQueueExecuteCallback); - current->callback(current->param); + current->action.execute(); } // even with overflow it's safe to subtract here @@ -198,16 +194,16 @@ int EventQueue::executeAll(efitime_t now) { int EventQueue::size(void) const { scheduling_s *tmp; int result; - LL_COUNT(head, tmp, result); + LL_COUNT2(head, tmp, result, nextScheduling_s); return result; } #if EFI_UNIT_TEST void EventQueue::assertListIsSorted() const { scheduling_s *current = head; - while (current != NULL && current->next != NULL) { - efiAssertVoid(CUSTOM_ERR_6623, current->momentX <= current->next->momentX, "list order"); - current = current->next; + while (current != NULL && current->nextScheduling_s != NULL) { + efiAssertVoid(CUSTOM_ERR_6623, current->momentX <= current->nextScheduling_s->momentX, "list order"); + current = current->nextScheduling_s; } } #endif @@ -220,10 +216,11 @@ scheduling_s * EventQueue::getHead() { return head; } -scheduling_s *EventQueue::getForUnitText(int index) { +// todo: reduce code duplication with another 'getElementAtIndexForUnitText' +scheduling_s *EventQueue::getElementAtIndexForUnitText(int index) { scheduling_s * current; - LL_FOREACH(head, current) + LL_FOREACH2(head, current, nextScheduling_s) { if (index == 0) return current; diff --git a/firmware/controllers/scheduling/event_queue.h b/firmware/controllers/system/timer/event_queue.h similarity index 50% rename from firmware/controllers/scheduling/event_queue.h rename to firmware/controllers/system/timer/event_queue.h index ba8a56cf07..d1789feb0a 100644 --- a/firmware/controllers/scheduling/event_queue.h +++ b/firmware/controllers/system/timer/event_queue.h @@ -18,29 +18,28 @@ #define QUEUE_LENGTH_LIMIT 1000 -template -bool assertNotInList(T *head, T*element) { - // this code is just to validate state, no functional load - T * current; - int counter = 0; - LL_FOREACH(head, current) - { - if (++counter > QUEUE_LENGTH_LIMIT) { - firmwareError(CUSTOM_ERR_LOOPED_QUEUE, "Looped queue?"); - return false; - } - if (current == element) { - /** - * for example, this might happen in case of sudden RPM change if event - * was not scheduled by angle but was scheduled by time. In case of scheduling - * by time with slow RPM the whole next fast revolution might be within the wait period - */ - warning(CUSTOM_RE_ADDING_INTO_EXECUTION_QUEUE, "re-adding element into event_queue"); - return true; - } - } +// templates do not accept field names so we use a macro here +#define assertNotInListMethodBody(T, head, element, field) \ + /* this code is just to validate state, no functional load*/ \ + T * current; \ + int counter = 0; \ + LL_FOREACH2(head, current, field) { \ + if (++counter > QUEUE_LENGTH_LIMIT) { \ + firmwareError(CUSTOM_ERR_LOOPED_QUEUE, "Looped queue?"); \ + return false; \ + } \ + if (current == element) { \ + /** \ + * for example, this might happen in case of sudden RPM change if event \ + * was not scheduled by angle but was scheduled by time. In case of scheduling \ + * by time with slow RPM the whole next fast revolution might be within the wait period \ + */ \ + warning(CUSTOM_RE_ADDING_INTO_EXECUTION_QUEUE, "re-adding element into event_queue"); \ + return true; \ + } \ + } \ return false; -} + /** * Execution sorted linked list @@ -59,7 +58,7 @@ public: efitime_t getNextEventTime(efitime_t nowUs) const; void clear(void); int size(void) const; - scheduling_s *getForUnitText(int index); + scheduling_s *getElementAtIndexForUnitText(int index); void setLateDelay(int value); scheduling_s * getHead(); void assertListIsSorted() const; diff --git a/firmware/controllers/scheduling/pwm_generator_logic.cpp b/firmware/controllers/system/timer/pwm_generator_logic.cpp similarity index 88% rename from firmware/controllers/scheduling/pwm_generator_logic.cpp rename to firmware/controllers/system/timer/pwm_generator_logic.cpp index eb4a07187a..c56e38d566 100644 --- a/firmware/controllers/scheduling/pwm_generator_logic.cpp +++ b/firmware/controllers/system/timer/pwm_generator_logic.cpp @@ -12,7 +12,6 @@ #include "os_access.h" #include "pwm_generator_logic.h" #include "pwm_generator.h" -#include "error_handling.h" #include "perf_trace.h" /** @@ -49,12 +48,12 @@ PwmConfig::PwmConfig() { arg = this; } -PwmConfig::PwmConfig(float *st, SingleWave *waves) : PwmConfig() { - multiWave.init(st, waves); +PwmConfig::PwmConfig(float *st, SingleChannelStateSequence *waves) : PwmConfig() { + multiChannelStateSequence.init(st, waves); } -void PwmConfig::init(float *st, SingleWave *waves) { - multiWave.init(st, waves); +void PwmConfig::init(float *st, SingleChannelStateSequence *waves) { + multiChannelStateSequence.init(st, waves); } /** @@ -92,7 +91,7 @@ void SimplePwm::setSimplePwmDutyCycle(float dutyCycle) { mode = PM_FULL; } else { mode = PM_NORMAL; - multiWave.setSwitchTime(0, dutyCycle); + multiChannelStateSequence.setSwitchTime(0, dutyCycle); } } @@ -103,7 +102,7 @@ static efitimeus_t getNextSwitchTimeUs(PwmConfig *state) { efiAssert(CUSTOM_ERR_ASSERT, state->safe.phaseIndex < PWM_PHASE_MAX_COUNT, "phaseIndex range", 0); int iteration = state->safe.iteration; // we handle PM_ZERO and PM_FULL separately - float switchTime = state->mode == PM_NORMAL ? state->multiWave.getSwitchTime(state->safe.phaseIndex) : 1; + float switchTime = state->mode == PM_NORMAL ? state->multiChannelStateSequence.getSwitchTime(state->safe.phaseIndex) : 1; float periodNt = state->safe.periodNt; #if DEBUG_PWM scheduleMsg(&logger, "iteration=%d switchTime=%.2f period=%.2f", iteration, switchTime, period); @@ -138,10 +137,15 @@ void PwmConfig::stop() { } void PwmConfig::handleCycleStart() { - efiAssertVoid(CUSTOM_ERR_6697, safe.phaseIndex == 0, "handleCycleStart"); - if (pwmCycleCallback != NULL) { - pwmCycleCallback(this); - } + if (safe.phaseIndex != 0) { + // https://github.com/rusefi/rusefi/issues/1030 + firmwareError(CUSTOM_PWM_CYCLE_START, "handleCycleStart %d", safe.phaseIndex); + return; + } + + if (pwmCycleCallback != NULL) { + pwmCycleCallback(this); + } efiAssertVoid(CUSTOM_ERR_6580, periodNt != 0, "period not initialized"); if (safe.periodNt != periodNt || safe.iteration == ITERATION_LIMIT) { /** @@ -254,7 +258,7 @@ static void timerCallback(PwmConfig *state) { return; } if (state->executor == NULL) { - firmwareError(CUSTOM_ERR_6695, "exec on %s", state->name); + firmwareError(CUSTOM_NULL_EXECUTOR, "exec on %s", state->name); return; } @@ -270,17 +274,17 @@ void copyPwmParameters(PwmConfig *state, int phaseCount, float const *switchTime state->phaseCount = phaseCount; for (int phaseIndex = 0; phaseIndex < phaseCount; phaseIndex++) { - state->multiWave.setSwitchTime(phaseIndex, switchTimes[phaseIndex]); + state->multiChannelStateSequence.setSwitchTime(phaseIndex, switchTimes[phaseIndex]); for (int channelIndex = 0; channelIndex < waveCount; channelIndex++) { // print("output switch time index (%d/%d) at %.2f to %d\r\n", phaseIndex, channelIndex, // switchTimes[phaseIndex], pinStates[waveIndex][phaseIndex]); pin_state_t value = pinStates[channelIndex][phaseIndex]; - state->multiWave.channels[channelIndex].setState(phaseIndex, value); + state->multiChannelStateSequence.channels[channelIndex].setState(phaseIndex, value); } } if (state->mode == PM_NORMAL) { - state->multiWave.checkSwitchTimes(phaseCount); + state->multiChannelStateSequence.checkSwitchTimes(phaseCount); } } @@ -311,7 +315,7 @@ void PwmConfig::weComplexInit(const char *msg, ExecutorInterface *executor, this->pwmCycleCallback = pwmCycleCallback; this->stateChangeCallback = stateChangeCallback; - multiWave.waveCount = waveCount; + multiChannelStateSequence.waveCount = waveCount; copyPwmParameters(this, phaseCount, switchTimes, waveCount, pinStates); @@ -362,10 +366,10 @@ void startSimplePwmExt(SimplePwm *state, const char *msg, */ void applyPinState(int stateIndex, PwmConfig *state) /* pwm_gen_callback */ { efiAssertVoid(CUSTOM_ERR_6663, stateIndex < PWM_PHASE_MAX_COUNT, "invalid stateIndex"); - efiAssertVoid(CUSTOM_ERR_6664, state->multiWave.waveCount <= PWM_PHASE_MAX_WAVE_PER_PWM, "invalid waveCount"); - for (int channelIndex = 0; channelIndex < state->multiWave.waveCount; channelIndex++) { + efiAssertVoid(CUSTOM_ERR_6664, state->multiChannelStateSequence.waveCount <= PWM_PHASE_MAX_WAVE_PER_PWM, "invalid waveCount"); + for (int channelIndex = 0; channelIndex < state->multiChannelStateSequence.waveCount; channelIndex++) { OutputPin *output = state->outputPins[channelIndex]; - int value = state->multiWave.getChannelState(channelIndex, stateIndex); + int value = state->multiChannelStateSequence.getChannelState(channelIndex, stateIndex); output->setValue(value); } } diff --git a/firmware/controllers/scheduling/pwm_generator_logic.h b/firmware/controllers/system/timer/pwm_generator_logic.h similarity index 92% rename from firmware/controllers/scheduling/pwm_generator_logic.h rename to firmware/controllers/system/timer/pwm_generator_logic.h index ab13b6ac12..f0f9e055fa 100644 --- a/firmware/controllers/scheduling/pwm_generator_logic.h +++ b/firmware/controllers/system/timer/pwm_generator_logic.h @@ -8,8 +8,8 @@ #ifndef PWM_GENERATOR_LOGIC_H_ #define PWM_GENERATOR_LOGIC_H_ +#include "state_sequence.h" #include "global.h" -#include "efi_wave.h" #include "scheduler.h" #include "efi_gpio.h" @@ -54,8 +54,8 @@ typedef enum { class PwmConfig { public: PwmConfig(); - PwmConfig(float *switchTimes, SingleWave *waves); - void init(float *switchTimes, SingleWave *waves); + PwmConfig(float *switchTimes, SingleChannelStateSequence *waves); + void init(float *switchTimes, SingleChannelStateSequence *waves); void *arg = nullptr; void weComplexInit(const char *msg, @@ -82,7 +82,7 @@ public: // todo: 'outputPins' should be extracted away from here since technically one can want PWM scheduler without actual pin output OutputPin *outputPins[PWM_PHASE_MAX_WAVE_PER_PWM]; - MultiWave multiWave; + MultiChannelStateSequence multiChannelStateSequence; efitimeus_t togglePwmState(); void stop(); @@ -120,10 +120,10 @@ public: explicit SimplePwm(const char *name); void setSimplePwmDutyCycle(float dutyCycle); pin_state_t pinStates[2]; - SingleWave sr[1]; + SingleChannelStateSequence sr[1]; float _switchTimes[2]; private: - SingleWave waveInstance; + SingleChannelStateSequence waveInstance; }; /** diff --git a/firmware/controllers/system/timer/readme.md b/firmware/controllers/system/timer/readme.md new file mode 100644 index 0000000000..6a21cb6bbc --- /dev/null +++ b/firmware/controllers/system/timer/readme.md @@ -0,0 +1 @@ +In this folder we have files related to hubrid hardware/software timer, including PWM generation. \ No newline at end of file diff --git a/firmware/controllers/scheduling/scheduler.h b/firmware/controllers/system/timer/scheduler.h similarity index 71% rename from firmware/controllers/scheduling/scheduler.h rename to firmware/controllers/system/timer/scheduler.h index 44e5f7adf9..17935acf9e 100644 --- a/firmware/controllers/scheduling/scheduler.h +++ b/firmware/controllers/system/timer/scheduler.h @@ -2,7 +2,7 @@ * @file scheduler.h * * @date May 18, 2014 - * @author Andrey Belomutskiy, (c) 2012-2017 + * @author Andrey Belomutskiy, (c) 2012-2019 */ #pragma once @@ -10,6 +10,18 @@ typedef void (*schfunc_t)(void *); +class action_s { +public: + void setAction(schfunc_t callback, void *param); + void execute(); + schfunc_t getCallback() const; + void * getArgument() const; + +private: + schfunc_t callback = nullptr; + void *param = nullptr; +}; + /** * This structure holds information about an event scheduled in the future: when to execute what callback with what parameters */ @@ -26,12 +38,11 @@ public: bool isScheduled = false; /** - * Scheduler implementation has a linked list of these scheduling records. + * Scheduler implementation uses a sorted linked list of these scheduling records. */ - scheduling_s *next = nullptr; + scheduling_s *nextScheduling_s = nullptr; - schfunc_t callback = nullptr; - void *param = nullptr; + action_s action; }; class ExecutorInterface { diff --git a/firmware/controllers/scheduling/signal_executor_sleep.cpp b/firmware/controllers/system/timer/signal_executor_sleep.cpp similarity index 93% rename from firmware/controllers/scheduling/signal_executor_sleep.cpp rename to firmware/controllers/system/timer/signal_executor_sleep.cpp index be5af50a9c..f08d30a608 100644 --- a/firmware/controllers/scheduling/signal_executor_sleep.cpp +++ b/firmware/controllers/system/timer/signal_executor_sleep.cpp @@ -39,16 +39,15 @@ void SleepExecutor::scheduleByTimestamp(scheduling_s *scheduling, efitimeus_t ti static void timerCallback(scheduling_s *scheduling) { #if EFI_PRINTF_FUEL_DETAILS - if (scheduling->callback == (schfunc_t)&seTurnPinLow) { - printf("executing cb=seTurnPinLow p=%d sch=%d now=%d\r\n", (int)scheduling->param, (int)scheduling, + if (scheduling->action.getCallback() == (schfunc_t)&seTurnPinLow) { + printf("executing cb=seTurnPinLow p=%d sch=%d now=%d\r\n", (int)scheduling->action.getArgument(), (int)scheduling, (int)getTimeNowUs()); } else { // printf("exec cb=%d p=%d\r\n", (int)scheduling->callback, (int)scheduling->param); } #endif /* EFI_SIMULATOR */ - scheduling->callback(scheduling->param); - + scheduling->action.execute(); } static void doScheduleForLater(scheduling_s *scheduling, int delayUs, schfunc_t callback, void *param) { @@ -62,8 +61,7 @@ static void doScheduleForLater(scheduling_s *scheduling, int delayUs, schfunc_t } bool alreadyLocked = lockAnyContext(); - scheduling->callback = callback; - scheduling->param = param; + scheduling->action.setAction(callback, param); int isArmed = chVTIsArmedI(&scheduling->timer); if (isArmed) { /** diff --git a/firmware/controllers/scheduling/signal_executor_sleep.h b/firmware/controllers/system/timer/signal_executor_sleep.h similarity index 100% rename from firmware/controllers/scheduling/signal_executor_sleep.h rename to firmware/controllers/system/timer/signal_executor_sleep.h diff --git a/firmware/controllers/scheduling/single_timer_executor.cpp b/firmware/controllers/system/timer/single_timer_executor.cpp similarity index 100% rename from firmware/controllers/scheduling/single_timer_executor.cpp rename to firmware/controllers/system/timer/single_timer_executor.cpp diff --git a/firmware/controllers/scheduling/single_timer_executor.h b/firmware/controllers/system/timer/single_timer_executor.h similarity index 89% rename from firmware/controllers/scheduling/single_timer_executor.h rename to firmware/controllers/system/timer/single_timer_executor.h index 49461ab8d8..cb844c3d76 100644 --- a/firmware/controllers/scheduling/single_timer_executor.h +++ b/firmware/controllers/system/timer/single_timer_executor.h @@ -14,8 +14,8 @@ class SingleTimerExecutor : public ExecutorInterface { public: SingleTimerExecutor(); - void scheduleByTimestamp(scheduling_s *scheduling, efitimeus_t timeUs, schfunc_t callback, void *param); - void scheduleForLater(scheduling_s *scheduling, int delayUs, schfunc_t callback, void *param); + void scheduleByTimestamp(scheduling_s *scheduling, efitimeus_t timeUs, schfunc_t callback, void *param) override; + void scheduleForLater(scheduling_s *scheduling, int delayUs, schfunc_t callback, void *param) override; void onTimerCallback(); int timerCallbackCounter; int scheduleCounter; diff --git a/firmware/controllers/system_fsio.h b/firmware/controllers/system_fsio.h index 4b808a71b9..d316277fc0 100644 --- a/firmware/controllers/system_fsio.h +++ b/firmware/controllers/system_fsio.h @@ -68,7 +68,7 @@ // starter block using configurable parameter // Human-readable: rpm < cranking_rpm -#define STARTER_BLOCK "rpm cranking_rpm <" +#define STARTER_RELAY_LOGIC "rpm cranking_rpm <" // Human-readable: fsio_table (3, rpm, map) / 100 #define BOOST_CONTROLLER "3 rpm map fsio_table 100 /" diff --git a/firmware/controllers/system_fsio.txt b/firmware/controllers/system_fsio.txt index fc2761e3ff..8a6148ca9f 100644 --- a/firmware/controllers/system_fsio.txt +++ b/firmware/controllers/system_fsio.txt @@ -46,7 +46,7 @@ RPM_ABOVE_6000_SOLENOID_80_DUTY=(rpm > 6000) * 0.8 RPM_BELOW_USER_SETTING_1=rpm < fsio_setting(1) # starter block using configurable parameter -STARTER_BLOCK=rpm < cranking_rpm +STARTER_RELAY_LOGIC=rpm < cranking_rpm BOOST_CONTROLLER=fsio_table (3, rpm, map) / 100 diff --git a/firmware/controllers/trigger/aux_valves.cpp b/firmware/controllers/trigger/aux_valves.cpp deleted file mode 100644 index 5efcbff995..0000000000 --- a/firmware/controllers/trigger/aux_valves.cpp +++ /dev/null @@ -1,111 +0,0 @@ -/* - * aux_valves.cpp - * - * - * Here we have two auxilary digital on/off outputs which would open once per each 360 degrees of engine crank revolution. - * The second valve is 180 degrees after the first one. - * - * Valve open and close angles are taken from fsioCurve1 and fsioCurve2 tables respectively, the position depend on TPS input. - * - * https://github.com/rusefi/rusefi/issues/490 - * - * @date Nov 25, 2017 - * @author Andrey Belomutskiy, (c) 2012-2018 - */ - -#include "engine_math.h" -#include "aux_valves.h" -#include "allsensors.h" -#include "trigger_central.h" - -EXTERN_ENGINE -; - -static scheduling_s turnOnEvent[AUX_DIGITAL_VALVE_COUNT][2]; -static scheduling_s turnOffEvent[AUX_DIGITAL_VALVE_COUNT][2]; - -static void turnOn(NamedOutputPin *output) { - output->setHigh(); -} - -static void turnOff(NamedOutputPin *output) { - output->setLow(); -} - -#define SCHEDULING_TRIGGER_INDEX 2 - -static void auxValveTriggerCallback(trigger_event_e ckpSignalType, - uint32_t index DECLARE_ENGINE_PARAMETER_SUFFIX) { - UNUSED(ckpSignalType); - - if (index != SCHEDULING_TRIGGER_INDEX) { - return; - } - int rpm = GET_RPM_VALUE; - if (!isValidRpm(rpm)) { - return; - } - - for (int valveIndex = 0; valveIndex < AUX_DIGITAL_VALVE_COUNT; valveIndex++) { - - NamedOutputPin *output = &enginePins.auxValve[valveIndex]; - - for (int phaseIndex = 0; phaseIndex < 2; phaseIndex++) { -/* I believe a more correct implementation is the following: - * here we properly account for trigger angle position in engine cycle coordinates - // todo: at the moment this logic is assuming four-stroke 720-degree engine cycle - angle_t extra = phaseIndex * 360 // cycle opens twice per 720 engine cycle - + valveIndex * 180 // 2nd valve is operating at 180 offset to first - + tdcPosition() // engine cycle position to trigger cycle position conversion - - ENGINE(triggerCentral.triggerShape.eventAngles[SCHEDULING_TRIGGER_INDEX]) - ; -*/ - angle_t extra = phaseIndex * 360 + valveIndex * 180; - angle_t onTime = extra + engine->engineState.auxValveStart; - fixAngle(onTime, "onTime", CUSTOM_ERR_6556); - scheduleByAngle(rpm, &turnOnEvent[valveIndex][phaseIndex], - onTime, - (schfunc_t) &turnOn, output PASS_ENGINE_PARAMETER_SUFFIX); - angle_t offTime = extra + engine->engineState.auxValveEnd; - fixAngle(offTime, "offTime", CUSTOM_ERR_6557); - scheduleByAngle(rpm, &turnOffEvent[valveIndex][phaseIndex], - offTime, - (schfunc_t) &turnOff, output PASS_ENGINE_PARAMETER_SUFFIX); - } - } -} - -void initAuxValves(Logging *sharedLogger DECLARE_ENGINE_PARAMETER_SUFFIX) { - UNUSED(sharedLogger); - if (engineConfiguration->auxValves[0] == GPIO_UNASSIGNED) { - return; - } - addTriggerEventListener(auxValveTriggerCallback, "tach", engine); -} - -void updateAuxValves(DECLARE_ENGINE_PARAMETER_SIGNATURE) { - if (engineConfiguration->auxValves[0] == GPIO_UNASSIGNED) { - return; - } - - float x = getTPS(PASS_ENGINE_PARAMETER_SIGNATURE); - if (cisnan(x)) { - // error should be already reported by now - return; - } - engine->engineState.auxValveStart = interpolate2d("aux", x, - engineConfiguration->fsioCurve1Bins, - engineConfiguration->fsioCurve1); - - engine->engineState.auxValveEnd = interpolate2d("aux", x, - engineConfiguration->fsioCurve2Bins, - engineConfiguration->fsioCurve2); - - if (engine->engineState.auxValveStart >= engine->engineState.auxValveEnd) { - // this is a fatal error to make this really visible - firmwareError(CUSTOM_AUX_OUT_OF_ORDER, "out of order at %.2f %.2f %.2f", x, - engine->engineState.auxValveStart, - engine->engineState.auxValveEnd); - } -} - diff --git a/firmware/controllers/trigger/aux_valves.h b/firmware/controllers/trigger/aux_valves.h deleted file mode 100644 index 172b488cff..0000000000 --- a/firmware/controllers/trigger/aux_valves.h +++ /dev/null @@ -1,16 +0,0 @@ -/* - * aux_valves.h - * - * @date Nov 25, 2017 - * @author Andrey Belomutskiy, (c) 2012-2017 - */ - -#ifndef CONTROLLERS_TRIGGER_AUX_VALVES_H_ -#define CONTROLLERS_TRIGGER_AUX_VALVES_H_ - -#include "engine.h" - -void initAuxValves(Logging *sharedLogger DECLARE_ENGINE_PARAMETER_SUFFIX); -void updateAuxValves(DECLARE_ENGINE_PARAMETER_SIGNATURE); - -#endif /* CONTROLLERS_TRIGGER_AUX_VALVES_H_ */ diff --git a/firmware/controllers/trigger/decoders/trigger_bmw.cpp b/firmware/controllers/trigger/decoders/trigger_bmw.cpp index 1e22772f9d..60e10ef343 100644 --- a/firmware/controllers/trigger/decoders/trigger_bmw.cpp +++ b/firmware/controllers/trigger/decoders/trigger_bmw.cpp @@ -7,7 +7,7 @@ #include "trigger_bmw.h" -static inline float addPair(TriggerShape *s, float a, float w) { +static inline float addPair(TriggerWaveform *s, float a, float w) { s->addEvent720(a, T_SECONDARY, TV_RISE); a += w; s->addEvent720(a, T_SECONDARY, TV_FALL); @@ -15,7 +15,7 @@ static inline float addPair(TriggerShape *s, float a, float w) { return a; } -void configureMiniCooperTriggerShape(TriggerShape *s) { +void configureMiniCooperTriggerWaveform(TriggerWaveform *s) { s->initialize(FOUR_STROKE_CAM_SENSOR, true); // s->initialState[0] = 1; diff --git a/firmware/controllers/trigger/decoders/trigger_bmw.h b/firmware/controllers/trigger/decoders/trigger_bmw.h index ae6ef6a3c1..9c75b8f002 100644 --- a/firmware/controllers/trigger/decoders/trigger_bmw.h +++ b/firmware/controllers/trigger/decoders/trigger_bmw.h @@ -9,5 +9,5 @@ #include "trigger_structure.h" -void configureMiniCooperTriggerShape(TriggerShape *s); +void configureMiniCooperTriggerWaveform(TriggerWaveform *s); diff --git a/firmware/controllers/trigger/decoders/trigger_chrysler.cpp b/firmware/controllers/trigger/decoders/trigger_chrysler.cpp index 3decbd5294..61c4f035e5 100644 --- a/firmware/controllers/trigger/decoders/trigger_chrysler.cpp +++ b/firmware/controllers/trigger/decoders/trigger_chrysler.cpp @@ -8,7 +8,7 @@ #include "trigger_chrysler.h" #include "trigger_universal.h" -void initDodgeRam(TriggerShape *s) { +void initDodgeRam(TriggerWaveform *s) { s->initialize(FOUR_STROKE_CAM_SENSOR, true); s->useRiseEdge = true; @@ -25,7 +25,7 @@ void initDodgeRam(TriggerShape *s) { s->useOnlyPrimaryForSync = true; } -void configureNeon2003TriggerShapeCrank(TriggerShape *s DECLARE_ENGINE_PARAMETER_SUFFIX) { +void configureNeon2003TriggerWaveformCrank(TriggerWaveform *s DECLARE_ENGINE_PARAMETER_SUFFIX) { s->initialize(FOUR_STROKE_CRANK_SENSOR, false); s->useRiseEdge = true; @@ -99,7 +99,7 @@ void configureNeon2003TriggerShapeCrank(TriggerShape *s DECLARE_ENGINE_PARAMETER s->addEvent720(m * 360, T_PRIMARY, TV_RISE); } -void configureNeon2003TriggerShapeCam(TriggerShape *s) { +void configureNeon2003TriggerWaveformCam(TriggerWaveform *s) { // todo: move sync point so that two channel does not have false trigger issues bool useOnlyPrimary = true; @@ -322,7 +322,7 @@ gap=1.43/0.71 } } -void configureDodgeStratusTriggerShape(TriggerShape *s) { +void configureDodgeStratusTriggerWaveform(TriggerWaveform *s) { s->initialize(FOUR_STROKE_CAM_SENSOR, false); s->isSynchronizationNeeded = true; @@ -388,7 +388,7 @@ void configureDodgeStratusTriggerShape(TriggerShape *s) { s->addEvent720(angle + w, T_PRIMARY, TV_FALL); } -static void configureNeon1995TriggerShapeCommon(bool withCam, TriggerShape *s) { +static void configureNeon1995TriggerWaveformCommon(bool withCam, TriggerWaveform *s) { trigger_wheel_e crank = withCam ? T_SECONDARY : T_PRIMARY; // voodoo magic - we always need 720 at the end @@ -448,17 +448,17 @@ static void configureNeon1995TriggerShapeCommon(bool withCam, TriggerShape *s) { } } -void configureNeon1995TriggerShapeOnlyCrank(TriggerShape *s) { +void configureNeon1995TriggerWaveformOnlyCrank(TriggerWaveform *s) { s->initialize(FOUR_STROKE_CRANK_SENSOR, false); s->setTriggerSynchronizationGap(3.79); s->tdcPosition = 279; - configureNeon1995TriggerShapeCommon(false, s); + configureNeon1995TriggerWaveformCommon(false, s); } -void configureNeon1995TriggerShape(TriggerShape *s) { +void configureNeon1995TriggerWaveform(TriggerWaveform *s) { s->initialize(FOUR_STROKE_CAM_SENSOR, true); s->setTriggerSynchronizationGap(0.8227); @@ -468,12 +468,12 @@ void configureNeon1995TriggerShape(TriggerShape *s) { s->initialState[T_PRIMARY] = TV_RISE; - configureNeon1995TriggerShapeCommon(true, s); + configureNeon1995TriggerWaveformCommon(true, s); s->useOnlyPrimaryForSync = true; } -void initJeep18_2_2_2(TriggerShape *s) { +void initJeep18_2_2_2(TriggerWaveform *s) { s->initialize(FOUR_STROKE_CAM_SENSOR, true); s->isSynchronizationNeeded = true; s->setTriggerSynchronizationGap(1); @@ -543,7 +543,7 @@ void initJeep18_2_2_2(TriggerShape *s) { } -static void add4cylblock(int off, TriggerShape *s) { +static void add4cylblock(int off, TriggerWaveform *s) { s->addEvent720(114 + off, T_SECONDARY, TV_RISE); s->addEvent720(114 + off + 2, T_SECONDARY, TV_FALL); @@ -558,7 +558,7 @@ static void add4cylblock(int off, TriggerShape *s) { } // TT_JEEP_4_CYL -void initJeep_XJ_4cyl_2500(TriggerShape *s) { +void initJeep_XJ_4cyl_2500(TriggerWaveform *s) { s->initialize(FOUR_STROKE_CAM_SENSOR, true); s->isSynchronizationNeeded = true; s->setTriggerSynchronizationGap(1); diff --git a/firmware/controllers/trigger/decoders/trigger_chrysler.h b/firmware/controllers/trigger/decoders/trigger_chrysler.h index c766487ad5..1ebcb1f35e 100644 --- a/firmware/controllers/trigger/decoders/trigger_chrysler.h +++ b/firmware/controllers/trigger/decoders/trigger_chrysler.h @@ -13,16 +13,16 @@ #define CHRYSLER_NGC4_GAP 1 #define CHRYSLER_NGC6_GAP 1.5 -void configureNeon1995TriggerShape(TriggerShape *s); -void configureNeon1995TriggerShapeOnlyCrank(TriggerShape *s); +void configureNeon1995TriggerWaveform(TriggerWaveform *s); +void configureNeon1995TriggerWaveformOnlyCrank(TriggerWaveform *s); -void configureNeon2003TriggerShapeCam(TriggerShape *s); -void configureNeon2003TriggerShapeCrank(TriggerShape *s); -void initDodgeRam(TriggerShape *s); +void configureNeon2003TriggerWaveformCam(TriggerWaveform *s); +void configureNeon2003TriggerWaveformCrank(TriggerWaveform *s); +void initDodgeRam(TriggerWaveform *s); -void configureDodgeStratusTriggerShape(TriggerShape *s); +void configureDodgeStratusTriggerWaveform(TriggerWaveform *s); -void initJeep18_2_2_2(TriggerShape *s); -void initJeep_XJ_4cyl_2500(TriggerShape *s); +void initJeep18_2_2_2(TriggerWaveform *s); +void initJeep_XJ_4cyl_2500(TriggerWaveform *s); #endif /* TRIGGER_CHRYSLER_H_ */ diff --git a/firmware/controllers/trigger/decoders/trigger_gm.cpp b/firmware/controllers/trigger/decoders/trigger_gm.cpp index ac381740f4..5f47bba6d6 100644 --- a/firmware/controllers/trigger/decoders/trigger_gm.cpp +++ b/firmware/controllers/trigger/decoders/trigger_gm.cpp @@ -7,7 +7,7 @@ #include "trigger_gm.h" -void configureGmTriggerShape(TriggerShape *s) { +void configureGmTriggerWaveform(TriggerWaveform *s) { s->initialize(FOUR_STROKE_CRANK_SENSOR, false); // all angles are x2 here - so, 5 degree width is 10 @@ -39,7 +39,7 @@ void configureGmTriggerShape(TriggerShape *s) { s->setTriggerSynchronizationGap(6); } -static int gm_tooth_pair(float startAngle, bool isShortLong, TriggerShape* s, int mult) +static int gm_tooth_pair(float startAngle, bool isShortLong, TriggerWaveform* s, int mult) { int window = (isShortLong ? 5 : 10) * mult; int end = startAngle + mult * 15; @@ -59,7 +59,7 @@ static int gm_tooth_pair(float startAngle, bool isShortLong, TriggerShape* s, in * * based on data in https://rusefi.com/forum/viewtopic.php?f=3&t=936&p=30303#p30285 */ -void initGmLS24(TriggerShape *s) { +void initGmLS24(TriggerWaveform *s) { s->initialize(FOUR_STROKE_CRANK_SENSOR, false); /* diff --git a/firmware/controllers/trigger/decoders/trigger_gm.h b/firmware/controllers/trigger/decoders/trigger_gm.h index 53cca74206..895f3526b9 100644 --- a/firmware/controllers/trigger/decoders/trigger_gm.h +++ b/firmware/controllers/trigger/decoders/trigger_gm.h @@ -10,7 +10,7 @@ #include "trigger_structure.h" -void configureGmTriggerShape(TriggerShape *s); -void initGmLS24(TriggerShape *s); +void configureGmTriggerWaveform(TriggerWaveform *s); +void initGmLS24(TriggerWaveform *s); #endif /* TRIGGER_GM_H_ */ diff --git a/firmware/controllers/trigger/decoders/trigger_honda.cpp b/firmware/controllers/trigger/decoders/trigger_honda.cpp index 8841417cd9..a2b926e8f5 100644 --- a/firmware/controllers/trigger/decoders/trigger_honda.cpp +++ b/firmware/controllers/trigger/decoders/trigger_honda.cpp @@ -10,7 +10,7 @@ #define S24 (720.0f / 24 / 2) -static float addAccordPair(TriggerShape *s, float sb, trigger_wheel_e const channelIndex) { +static float addAccordPair(TriggerWaveform *s, float sb, trigger_wheel_e const channelIndex) { s->addEvent720(sb, channelIndex, TV_RISE); sb += S24; s->addEvent720(sb, channelIndex, TV_FALL); @@ -20,7 +20,7 @@ static float addAccordPair(TriggerShape *s, float sb, trigger_wheel_e const chan } #define DIP 7.5f -static float addAccordPair3(TriggerShape *s, float sb) { +static float addAccordPair3(TriggerWaveform *s, float sb) { sb += DIP; s->addEvent720(sb, T_CHANNEL_3, TV_RISE); sb += DIP; @@ -33,7 +33,7 @@ static float addAccordPair3(TriggerShape *s, float sb) { * Thank you Dip! * http://forum.pgmfi.org/viewtopic.php?f=2&t=15570start=210#p139007 */ -void configureHondaAccordCDDip(TriggerShape *s) { +void configureHondaAccordCDDip(TriggerWaveform *s) { s->initialize(FOUR_STROKE_CAM_SENSOR, true); s->initialState[T_SECONDARY] = TV_RISE; @@ -102,7 +102,7 @@ void configureHondaAccordCDDip(TriggerShape *s) { * '4' is conditional * '24' is always secondary channel */ -void configureHonda_1_4_24(TriggerShape *s, bool withOneEventSignal, bool withFourEventSignal, +void configureHonda_1_4_24(TriggerWaveform *s, bool withOneEventSignal, bool withFourEventSignal, trigger_wheel_e const oneEventWave, trigger_wheel_e const fourEventWave, float prefix) { @@ -166,7 +166,7 @@ void configureHonda_1_4_24(TriggerShape *s, bool withOneEventSignal, bool withFo s->useOnlyPrimaryForSync = true; } -void configureHondaCbr600(TriggerShape *s) { +void configureHondaCbr600(TriggerWaveform *s) { s->initialize(FOUR_STROKE_CAM_SENSOR, true); s->useOnlyPrimaryForSync = true; s->isSynchronizationNeeded = true; @@ -209,7 +209,7 @@ void configureHondaCbr600(TriggerShape *s) { s->addEvent720(720.0f, T_PRIMARY, TV_RISE); } -void configureHondaCbr600custom(TriggerShape *s) { +void configureHondaCbr600custom(TriggerWaveform *s) { // w = 15 float w = 720 / 2 / 24; @@ -283,7 +283,7 @@ void configureHondaCbr600custom(TriggerShape *s) { } -void configureHondaAccordShifted(TriggerShape *s) { +void configureHondaAccordShifted(TriggerWaveform *s) { s->initialize(FOUR_STROKE_CAM_SENSOR, true); float sb = S24; @@ -314,7 +314,7 @@ void configureHondaAccordShifted(TriggerShape *s) { s->isSynchronizationNeeded = false; } -void configureOnePlus16(TriggerShape *s, operation_mode_e operationMode) { +void configureOnePlus16(TriggerWaveform *s, operation_mode_e operationMode) { UNUSED(operationMode); s->initialize(FOUR_STROKE_CAM_SENSOR, true); diff --git a/firmware/controllers/trigger/decoders/trigger_honda.h b/firmware/controllers/trigger/decoders/trigger_honda.h index 365a46b9d8..a469d95661 100644 --- a/firmware/controllers/trigger/decoders/trigger_honda.h +++ b/firmware/controllers/trigger/decoders/trigger_honda.h @@ -10,17 +10,17 @@ #include "trigger_structure.h" -void configureHondaAccordCDDip(TriggerShape *s); -void configureHondaAccordShifted(TriggerShape *s); +void configureHondaAccordCDDip(TriggerWaveform *s); +void configureHondaAccordShifted(TriggerWaveform *s); -void configureHonda_1_4_24(TriggerShape *s, bool withOneEventSignal, bool withFourEventSignal, +void configureHonda_1_4_24(TriggerWaveform *s, bool withOneEventSignal, bool withFourEventSignal, trigger_wheel_e const oneEventWave, trigger_wheel_e const fourEventWave, float d); -void configureOnePlus16(TriggerShape *s, operation_mode_e operationMode); +void configureOnePlus16(TriggerWaveform *s, operation_mode_e operationMode); -void configureHondaCbr600(TriggerShape *s); -void configureHondaCbr600custom(TriggerShape *s); +void configureHondaCbr600(TriggerWaveform *s); +void configureHondaCbr600custom(TriggerWaveform *s); #endif /* CONTROLLERS_TRIGGER_TRIGGER_HONDA_H_ */ diff --git a/firmware/controllers/trigger/decoders/trigger_mazda.cpp b/firmware/controllers/trigger/decoders/trigger_mazda.cpp index cb15e7d0c2..9a4f48dfa6 100644 --- a/firmware/controllers/trigger/decoders/trigger_mazda.cpp +++ b/firmware/controllers/trigger/decoders/trigger_mazda.cpp @@ -20,7 +20,7 @@ #include "trigger_mazda.h" -void initializeMazdaMiataNaShape(TriggerShape *s) { +void initializeMazdaMiataNaShape(TriggerWaveform *s) { s->initialize(FOUR_STROKE_CAM_SENSOR, true); s->setTriggerSynchronizationGap2(1.4930 * 0.6f, 1.4930 * 1.3f); s->useRiseEdge = false; @@ -56,7 +56,7 @@ void initializeMazdaMiataNaShape(TriggerShape *s) { * by alexander-n8hgeg5e * See https://rusefi.com/forum/viewtopic.php?f=5&t=1447 */ -void initialize_Mazda_Engine_z5_Shape(TriggerShape *s) { +void initialize_Mazda_Engine_z5_Shape(TriggerWaveform *s) { s->initialize(FOUR_STROKE_CAM_SENSOR, false); /** * My Signal is: 60, 60, 102, 60 @@ -87,7 +87,7 @@ void initialize_Mazda_Engine_z5_Shape(TriggerShape *s) { } // TT_MIATA_VVT -void initializeMazdaMiataNb2Crank(TriggerShape *s) { +void initializeMazdaMiataNb2Crank(TriggerWaveform *s) { s->initialize(FOUR_STROKE_SYMMETRICAL_CRANK_SENSOR, false); float o = 160; @@ -101,7 +101,7 @@ void initializeMazdaMiataNb2Crank(TriggerShape *s) { s->addEvent720(o + 4 * 140.0f, T_PRIMARY, TV_RISE); } -static void initializeMazdaMiataNb1ShapeWithOffset(TriggerShape *s, float offset) { +static void initializeMazdaMiataNb1ShapeWithOffset(TriggerWaveform *s, float offset) { s->initialize(FOUR_STROKE_CAM_SENSOR, true); s->setTriggerSynchronizationGap3(0, 0.065, 0.17f); s->useRiseEdge = false; @@ -143,15 +143,15 @@ static void initializeMazdaMiataNb1ShapeWithOffset(TriggerShape *s, float offset s->addEvent720(720.0f, T_PRIMARY, TV_RISE); } -void initializeMazdaMiataNb1Shape(TriggerShape *s) { +void initializeMazdaMiataNb1Shape(TriggerWaveform *s) { initializeMazdaMiataNb1ShapeWithOffset(s, 0); } -void initializeMazdaMiataVVtTestShape(TriggerShape *s) { +void initializeMazdaMiataVVtTestShape(TriggerWaveform *s) { initializeMazdaMiataNb1ShapeWithOffset(s, -22); } -void configureMazdaProtegeSOHC(TriggerShape *s) { +void configureMazdaProtegeSOHC(TriggerWaveform *s) { // todo: move to into configuration definition s->needSecondTriggerInput = FALSE; @@ -181,7 +181,7 @@ void configureMazdaProtegeSOHC(TriggerShape *s) { s->isSynchronizationNeeded = false; } -void configureMazdaProtegeLx(TriggerShape *s) { +void configureMazdaProtegeLx(TriggerWaveform *s) { // todo: move to into configuration definition s->needSecondTriggerInput = FALSE; s->initialize(FOUR_STROKE_CAM_SENSOR, true); s->useOnlyPrimaryForSync = true; diff --git a/firmware/controllers/trigger/decoders/trigger_mazda.h b/firmware/controllers/trigger/decoders/trigger_mazda.h index 4f630cac35..3523bbb725 100644 --- a/firmware/controllers/trigger/decoders/trigger_mazda.h +++ b/firmware/controllers/trigger/decoders/trigger_mazda.h @@ -12,12 +12,12 @@ #define MIATA_NA_GAP 1.4930f -void initializeMazdaMiataNaShape(TriggerShape *s); -void initializeMazdaMiataNb1Shape(TriggerShape *s); -void initializeMazdaMiataNb2Crank(TriggerShape *s); -void initializeMazdaMiataVVtTestShape(TriggerShape *s); -void configureMazdaProtegeSOHC(TriggerShape *s); -void configureMazdaProtegeLx(TriggerShape *s); -void initialize_Mazda_Engine_z5_Shape(TriggerShape *s); +void initializeMazdaMiataNaShape(TriggerWaveform *s); +void initializeMazdaMiataNb1Shape(TriggerWaveform *s); +void initializeMazdaMiataNb2Crank(TriggerWaveform *s); +void initializeMazdaMiataVVtTestShape(TriggerWaveform *s); +void configureMazdaProtegeSOHC(TriggerWaveform *s); +void configureMazdaProtegeLx(TriggerWaveform *s); +void initialize_Mazda_Engine_z5_Shape(TriggerWaveform *s); #endif /* TRIGGER_MAZDA_H_ */ diff --git a/firmware/controllers/trigger/decoders/trigger_misc.cpp b/firmware/controllers/trigger/decoders/trigger_misc.cpp index 2dbea44a5f..dc9b792f38 100644 --- a/firmware/controllers/trigger/decoders/trigger_misc.cpp +++ b/firmware/controllers/trigger/decoders/trigger_misc.cpp @@ -8,7 +8,7 @@ #include "trigger_misc.h" // TT_FIAT_IAW_P8 -void configureFiatIAQ_P8(TriggerShape * s) { +void configureFiatIAQ_P8(TriggerWaveform * s) { s->initialize(FOUR_STROKE_CAM_SENSOR, false); s->isSynchronizationNeeded = true; diff --git a/firmware/controllers/trigger/decoders/trigger_misc.h b/firmware/controllers/trigger/decoders/trigger_misc.h index e56b7f6e9c..c2c4ec0ef0 100644 --- a/firmware/controllers/trigger/decoders/trigger_misc.h +++ b/firmware/controllers/trigger/decoders/trigger_misc.h @@ -10,6 +10,6 @@ #include "trigger_structure.h" -void configureFiatIAQ_P8(TriggerShape * s); +void configureFiatIAQ_P8(TriggerWaveform * s); #endif /* CONTROLLERS_TRIGGER_DECODERS_TRIGGER_MISC_H_ */ diff --git a/firmware/controllers/trigger/decoders/trigger_mitsubishi.cpp b/firmware/controllers/trigger/decoders/trigger_mitsubishi.cpp index cc6a26fb21..aa1c824b9d 100644 --- a/firmware/controllers/trigger/decoders/trigger_mitsubishi.cpp +++ b/firmware/controllers/trigger/decoders/trigger_mitsubishi.cpp @@ -7,7 +7,7 @@ #include "trigger_mitsubishi.h" -void configureFordAspireTriggerShape(TriggerShape * s) { +void configureFordAspireTriggerWaveform(TriggerWaveform * s) { s->initialize(FOUR_STROKE_CAM_SENSOR, true); s->isSynchronizationNeeded = false; @@ -31,7 +31,7 @@ void configureFordAspireTriggerShape(TriggerShape * s) { /** * TT_MITSUBISHI = 11 */ -void initializeMitsubishi4g18(TriggerShape *s) { +void initializeMitsubishi4g18(TriggerWaveform *s) { s->initialize(FOUR_STROKE_CAM_SENSOR, true); s->useRiseEdge = false; diff --git a/firmware/controllers/trigger/decoders/trigger_mitsubishi.h b/firmware/controllers/trigger/decoders/trigger_mitsubishi.h index 0df0b7b33d..984e9d154e 100644 --- a/firmware/controllers/trigger/decoders/trigger_mitsubishi.h +++ b/firmware/controllers/trigger/decoders/trigger_mitsubishi.h @@ -9,7 +9,7 @@ #include "trigger_structure.h" -void initializeMitsubishi4g18(TriggerShape *s); -void configureFordAspireTriggerShape(TriggerShape * s); +void initializeMitsubishi4g18(TriggerWaveform *s); +void configureFordAspireTriggerWaveform(TriggerWaveform * s); #endif /* TRIGGER_MITSUBISHI_H_ */ diff --git a/firmware/controllers/trigger/decoders/trigger_nissan.cpp b/firmware/controllers/trigger/decoders/trigger_nissan.cpp index 9c177b780d..827ac7a47a 100644 --- a/firmware/controllers/trigger/decoders/trigger_nissan.cpp +++ b/firmware/controllers/trigger/decoders/trigger_nissan.cpp @@ -13,7 +13,7 @@ /** * 8,2,2,2 Nissan pattern */ -static void initializeNissanSR20VE_4_optional_360(TriggerShape *s, bool with2nd) { +static void initializeNissanSR20VE_4_optional_360(TriggerWaveform *s, bool with2nd) { s->initialize(FOUR_STROKE_CAM_SENSOR, with2nd); s->isSynchronizationNeeded = true; s->gapBothDirections = true; @@ -99,10 +99,10 @@ static void initializeNissanSR20VE_4_optional_360(TriggerShape *s, bool with2nd) * Nissan Primera p11 year 1995-2002 */ -void initializeNissanSR20VE_4(TriggerShape *s) { +void initializeNissanSR20VE_4(TriggerWaveform *s) { initializeNissanSR20VE_4_optional_360(s, false); } -void initializeNissanSR20VE_4_360(TriggerShape *s) { +void initializeNissanSR20VE_4_360(TriggerWaveform *s) { initializeNissanSR20VE_4_optional_360(s, true); } diff --git a/firmware/controllers/trigger/decoders/trigger_nissan.h b/firmware/controllers/trigger/decoders/trigger_nissan.h index bc5d76bb90..dcfdf85f3b 100644 --- a/firmware/controllers/trigger/decoders/trigger_nissan.h +++ b/firmware/controllers/trigger/decoders/trigger_nissan.h @@ -10,7 +10,7 @@ #include "trigger_structure.h" -void initializeNissanSR20VE_4(TriggerShape *s); -void initializeNissanSR20VE_4_360(TriggerShape *s); +void initializeNissanSR20VE_4(TriggerWaveform *s); +void initializeNissanSR20VE_4_360(TriggerWaveform *s); #endif /* CONTROLLERS_TRIGGER_TRIGGER_NISSAN_H_ */ diff --git a/firmware/controllers/trigger/decoders/trigger_rover.cpp b/firmware/controllers/trigger/decoders/trigger_rover.cpp index 8974cadad4..8535653fc4 100644 --- a/firmware/controllers/trigger/decoders/trigger_rover.cpp +++ b/firmware/controllers/trigger/decoders/trigger_rover.cpp @@ -11,7 +11,7 @@ /** * https://en.wikipedia.org/wiki/Rover_K-series_engine */ -void initializeRoverK(TriggerShape *s) { +void initializeRoverK(TriggerWaveform *s) { s->initialize(FOUR_STROKE_CRANK_SENSOR, false); float tooth = 20; diff --git a/firmware/controllers/trigger/decoders/trigger_rover.h b/firmware/controllers/trigger/decoders/trigger_rover.h index b057770229..5fc9f92dff 100644 --- a/firmware/controllers/trigger/decoders/trigger_rover.h +++ b/firmware/controllers/trigger/decoders/trigger_rover.h @@ -11,6 +11,6 @@ #include "trigger_structure.h" -void initializeRoverK(TriggerShape *s); +void initializeRoverK(TriggerWaveform *s); #endif /* CONTROLLERS_TRIGGER_TRIGGER_ROVER_H_ */ diff --git a/firmware/controllers/trigger/decoders/trigger_structure.cpp b/firmware/controllers/trigger/decoders/trigger_structure.cpp index 62824046bc..2a885c3ff5 100644 --- a/firmware/controllers/trigger/decoders/trigger_structure.cpp +++ b/firmware/controllers/trigger/decoders/trigger_structure.cpp @@ -44,6 +44,11 @@ #include "engine_configuration.h" extern persistent_config_container_s persistentState; +EXTERN_ENGINE; + +void event_trigger_position_s::setAngle(angle_t angle DECLARE_ENGINE_PARAMETER_SUFFIX) { + TRIGGER_WAVEFORM(findTriggerPosition(this, angle PASS_CONFIG_PARAM(engineConfiguration->globalTriggerAngleOffset))); +} trigger_shape_helper::trigger_shape_helper() { memset(&pinStates, 0, sizeof(pinStates)); @@ -52,7 +57,7 @@ trigger_shape_helper::trigger_shape_helper() { } } -TriggerShape::TriggerShape() : +TriggerWaveform::TriggerWaveform() : wave(switchTimesBuffer, NULL) { initialize(OM_NONE, false); wave.channels = h.channels; @@ -60,7 +65,7 @@ TriggerShape::TriggerShape() : memset(triggerIndexByAngle, 0, sizeof(triggerIndexByAngle)); } -void TriggerShape::initialize(operation_mode_e operationMode, bool needSecondTriggerInput) { +void TriggerWaveform::initialize(operation_mode_e operationMode, bool needSecondTriggerInput) { isSynchronizationNeeded = true; // that's default value bothFrontsRequired = false; this->needSecondTriggerInput = needSecondTriggerInput; @@ -96,18 +101,18 @@ void TriggerShape::initialize(operation_mode_e operationMode, bool needSecondTri #endif } -int TriggerShape::getSize() const { +int TriggerWaveform::getSize() const { return privateTriggerDefinitionSize; } -int TriggerShape::getTriggerShapeSynchPointIndex() const { +int TriggerWaveform::getTriggerWaveformSynchPointIndex() const { return triggerShapeSynchPointIndex; } /** * physical primary trigger duration */ -angle_t TriggerShape::getCycleDuration() const { +angle_t TriggerWaveform::getCycleDuration() const { switch (operationMode) { case FOUR_STROKE_SYMMETRICAL_CRANK_SENSOR: return 180; @@ -123,7 +128,7 @@ angle_t TriggerShape::getCycleDuration() const { * Trigger event count equals engine cycle event count if we have a cam sensor. * Two trigger cycles make one engine cycle in case of a four stroke engine If we only have a cranksensor. */ -uint32_t TriggerShape::getLength() const { +uint32_t TriggerWaveform::getLength() const { /** * 4 for FOUR_STROKE_SYMMETRICAL_CRANK_SENSOR * 2 for FOUR_STROKE_CRANK_SENSOR @@ -133,7 +138,7 @@ uint32_t TriggerShape::getLength() const { return multiplier * getSize(); } -angle_t TriggerShape::getAngle(int index) const { +angle_t TriggerWaveform::getAngle(int index) const { // todo: why is this check here? looks like the code below could be used universally if (operationMode == FOUR_STROKE_CAM_SENSOR) { return getSwitchAngle(index); @@ -151,7 +156,7 @@ angle_t TriggerShape::getAngle(int index) const { return getCycleDuration() * crankCycle + getSwitchAngle(remainder); } -void TriggerShape::addEventClamped(angle_t angle, trigger_wheel_e const channelIndex, trigger_value_e const stateParam, float filterLeft, float filterRight) { +void TriggerWaveform::addEventClamped(angle_t angle, trigger_wheel_e const channelIndex, trigger_value_e const stateParam, float filterLeft, float filterRight) { if (angle > filterLeft && angle < filterRight) { #if EFI_UNIT_TEST // printf("addEventClamped %f %s\r\n", angle, getTrigger_value_e(stateParam)); @@ -160,7 +165,7 @@ void TriggerShape::addEventClamped(angle_t angle, trigger_wheel_e const channelI } } -operation_mode_e TriggerShape::getOperationMode() const { +operation_mode_e TriggerWaveform::getOperationMode() const { return operationMode; } @@ -168,7 +173,7 @@ operation_mode_e TriggerShape::getOperationMode() const { extern bool printTriggerDebug; #endif -void TriggerShape::calculateExpectedEventCounts(bool useOnlyRisingEdgeForTrigger) { +void TriggerWaveform::calculateExpectedEventCounts(bool useOnlyRisingEdgeForTrigger) { UNUSED(useOnlyRisingEdgeForTrigger); // todo: move the following logic from below here // if (!useOnlyRisingEdgeForTrigger || stateParam == TV_RISE) { @@ -177,11 +182,11 @@ void TriggerShape::calculateExpectedEventCounts(bool useOnlyRisingEdgeForTrigger } -void TriggerShape::addEvent720(angle_t angle, trigger_wheel_e const channelIndex, trigger_value_e const stateParam) { +void TriggerWaveform::addEvent720(angle_t angle, trigger_wheel_e const channelIndex, trigger_value_e const stateParam) { addEvent(angle / 720, channelIndex, stateParam); } -void TriggerShape::addEvent(angle_t angle, trigger_wheel_e const channelIndex, trigger_value_e const stateParam) { +void TriggerWaveform::addEvent(angle_t angle, trigger_wheel_e const channelIndex, trigger_value_e const stateParam) { efiAssertVoid(CUSTOM_OMODE_UNDEF, operationMode != OM_NONE, "operationMode not set"); efiAssertVoid(CUSTOM_ERR_6598, channelIndex!= T_SECONDARY || needSecondTriggerInput, "secondary needed or not?"); @@ -224,7 +229,7 @@ void TriggerShape::addEvent(angle_t angle, trigger_wheel_e const channelIndex, t if (privateTriggerDefinitionSize == 0) { privateTriggerDefinitionSize = 1; for (int i = 0; i < PWM_PHASE_MAX_WAVE_PER_PWM; i++) { - SingleWave *wave = &this->wave.channels[i]; + SingleChannelStateSequence *wave = &this->wave.channels[i]; if (wave->pinStates == NULL) { warning(CUSTOM_ERR_STATE_NULL, "wave pinStates is NULL"); @@ -278,26 +283,26 @@ void TriggerShape::addEvent(angle_t angle, trigger_wheel_e const channelIndex, t wave.channels[channelIndex].setState(index, state); } -angle_t TriggerShape::getSwitchAngle(int index) const { +angle_t TriggerWaveform::getSwitchAngle(int index) const { return getCycleDuration() * wave.getSwitchTime(index); } -void setToothedWheelConfiguration(TriggerShape *s, int total, int skipped, +void setToothedWheelConfiguration(TriggerWaveform *s, int total, int skipped, operation_mode_e operationMode) { #if EFI_ENGINE_CONTROL s->useRiseEdge = true; - initializeSkippedToothTriggerShapeExt(s, total, skipped, + initializeSkippedToothTriggerWaveformExt(s, total, skipped, operationMode); #endif } -void TriggerShape::setTriggerSynchronizationGap2(float syncRatioFrom, float syncRatioTo) { +void TriggerWaveform::setTriggerSynchronizationGap2(float syncRatioFrom, float syncRatioTo) { setTriggerSynchronizationGap3(/*gapIndex*/0, syncRatioFrom, syncRatioTo); } -void TriggerShape::setTriggerSynchronizationGap3(int gapIndex, float syncRatioFrom, float syncRatioTo) { +void TriggerWaveform::setTriggerSynchronizationGap3(int gapIndex, float syncRatioFrom, float syncRatioTo) { isSynchronizationNeeded = true; this->syncronizationRatioFrom[gapIndex] = syncRatioFrom; this->syncronizationRatioTo[gapIndex] = syncRatioTo; @@ -317,7 +322,7 @@ void TriggerShape::setTriggerSynchronizationGap3(int gapIndex, float syncRatioFr /** * this method is only used on initialization */ -int TriggerShape::findAngleIndex(float target) const { +int TriggerWaveform::findAngleIndex(float target) const { int engineCycleEventCount = getLength(); efiAssert(CUSTOM_ERR_ASSERT, engineCycleEventCount > 0, "engineCycleEventCount", 0); @@ -345,11 +350,11 @@ int TriggerShape::findAngleIndex(float target) const { return left - 1; } -void TriggerShape::setShapeDefinitionError(bool value) { +void TriggerWaveform::setShapeDefinitionError(bool value) { shapeDefinitionError = value; } -void TriggerShape::findTriggerPosition(event_trigger_position_s *position, +void TriggerWaveform::findTriggerPosition(event_trigger_position_s *position, angle_t angle DEFINE_CONFIG_PARAM(angle_t, globalTriggerAngleOffset)) { efiAssertVoid(CUSTOM_ERR_6574, !cisnan(angle), "findAngle#1"); assertAngleRange(angle, "findAngle#a1", CUSTOM_ERR_6545); @@ -373,11 +378,10 @@ void TriggerShape::findTriggerPosition(event_trigger_position_s *position, } position->triggerEventIndex = triggerEventIndex; - position->triggerEventAngle = triggerEventAngle; position->angleOffsetFromTriggerEvent = angle - triggerEventAngle; } -void TriggerShape::prepareShape() { +void TriggerWaveform::prepareShape() { #if EFI_ENGINE_CONTROL && EFI_SHAFT_POSITION_INPUT int engineCycleInt = (int) getEngineCycle(operationMode); for (int angle = 0; angle < engineCycleInt; angle++) { @@ -391,19 +395,19 @@ void TriggerShape::prepareShape() { #endif } -void TriggerShape::setTriggerSynchronizationGap(float syncRatio) { +void TriggerWaveform::setTriggerSynchronizationGap(float syncRatio) { setTriggerSynchronizationGap3(/*gapIndex*/0, syncRatio * 0.75f, syncRatio * 1.25f); } -void TriggerShape::setSecondTriggerSynchronizationGap2(float syncRatioFrom, float syncRatioTo) { +void TriggerWaveform::setSecondTriggerSynchronizationGap2(float syncRatioFrom, float syncRatioTo) { setTriggerSynchronizationGap3(/*gapIndex*/1, syncRatioFrom, syncRatioTo); } -void TriggerShape::setThirdTriggerSynchronizationGap(float syncRatio) { +void TriggerWaveform::setThirdTriggerSynchronizationGap(float syncRatio) { setTriggerSynchronizationGap3(/*gapIndex*/2, syncRatio * 0.75f, syncRatio * 1.25f); } -void TriggerShape::setSecondTriggerSynchronizationGap(float syncRatio) { +void TriggerWaveform::setSecondTriggerSynchronizationGap(float syncRatio) { setTriggerSynchronizationGap3(/*gapIndex*/1, syncRatio * 0.75f, syncRatio * 1.25f); } @@ -411,11 +415,11 @@ void TriggerShape::setSecondTriggerSynchronizationGap(float syncRatio) { /** * External logger is needed because at this point our logger is not yet initialized */ -void TriggerShape::initializeTriggerShape(Logging *logger, operation_mode_e ambiguousOperationMode, bool useOnlyRisingEdgeForTrigger, const trigger_config_s *triggerConfig) { +void TriggerWaveform::initializeTriggerWaveform(Logging *logger, operation_mode_e ambiguousOperationMode, bool useOnlyRisingEdgeForTrigger, const trigger_config_s *triggerConfig) { #if EFI_PROD_CODE efiAssertVoid(CUSTOM_ERR_6641, getCurrentRemainingStack() > 256, "init t"); - scheduleMsg(logger, "initializeTriggerShape(%s/%d)", getTrigger_type_e(triggerConfig->type), (int) triggerConfig->type); + scheduleMsg(logger, "initializeTriggerWaveform(%s/%d)", getTrigger_type_e(triggerConfig->type), (int) triggerConfig->type); #endif shapeDefinitionError = false; @@ -425,7 +429,7 @@ void TriggerShape::initializeTriggerShape(Logging *logger, operation_mode_e ambi switch (triggerConfig->type) { case TT_TOOTHED_WHEEL: - initializeSkippedToothTriggerShapeExt(this, triggerConfig->customTotalToothCount, + initializeSkippedToothTriggerWaveformExt(this, triggerConfig->customTotalToothCount, triggerConfig->customSkippedToothCount, ambiguousOperationMode); break; @@ -450,32 +454,32 @@ void TriggerShape::initializeTriggerShape(Logging *logger, operation_mode_e ambi break; case TT_DODGE_NEON_1995: - configureNeon1995TriggerShape(this); + configureNeon1995TriggerWaveform(this); break; case TT_DODGE_NEON_1995_ONLY_CRANK: - configureNeon1995TriggerShapeOnlyCrank(this); + configureNeon1995TriggerWaveformOnlyCrank(this); break; case TT_DODGE_STRATUS: - configureDodgeStratusTriggerShape(this); + configureDodgeStratusTriggerWaveform(this); break; case TT_DODGE_NEON_2003_CAM: - configureNeon2003TriggerShapeCam(this); + configureNeon2003TriggerWaveformCam(this); break; case TT_DODGE_NEON_2003_CRANK: - configureNeon2003TriggerShapeCam(this); -// configureNeon2003TriggerShapeCrank(triggerShape); + configureNeon2003TriggerWaveformCam(this); +// configureNeon2003TriggerWaveformCrank(triggerShape); break; case TT_FORD_ASPIRE: - configureFordAspireTriggerShape(this); + configureFordAspireTriggerWaveform(this); break; case TT_GM_7X: - configureGmTriggerShape(this); + configureGmTriggerWaveform(this); break; case TT_MAZDA_DOHC_1_4: @@ -503,7 +507,7 @@ void TriggerShape::initializeTriggerShape(Logging *logger, operation_mode_e ambi break; case TT_MINI_COOPER_R50: - configureMiniCooperTriggerShape(this); + configureMiniCooperTriggerWaveform(this); break; case TT_TOOTHED_WHEEL_60_2: @@ -600,7 +604,7 @@ void TriggerShape::initializeTriggerShape(Logging *logger, operation_mode_e ambi default: setShapeDefinitionError(true); - warning(CUSTOM_ERR_NO_SHAPE, "initializeTriggerShape() not implemented: %d", triggerConfig->type); + warning(CUSTOM_ERR_NO_SHAPE, "initializeTriggerWaveform() not implemented: %d", triggerConfig->type); } /** * Feb 2019 suggestion: it would be an improvement to remove 'expectedEventCount' logic from 'addEvent' diff --git a/firmware/controllers/trigger/decoders/trigger_structure.h b/firmware/controllers/trigger/decoders/trigger_structure.h index b83f126406..6176e011d8 100644 --- a/firmware/controllers/trigger/decoders/trigger_structure.h +++ b/firmware/controllers/trigger/decoders/trigger_structure.h @@ -2,15 +2,14 @@ * @file trigger_structure.h * * @date Dec 22, 2013 - * @author Andrey Belomutskiy, (c) 2012-2018 + * @author Andrey Belomutskiy, (c) 2012-2019 */ -#ifndef TRIGGER_STRUCTURE_H_ -#define TRIGGER_STRUCTURE_H_ +#pragma once +#include "state_sequence.h" #include "globalaccess.h" #include "engine_configuration_generated_structures.h" -#include "efi_wave.h" #define FOUR_STROKE_ENGINE_CYCLE 720 @@ -47,13 +46,10 @@ class event_trigger_position_s { public: uint32_t triggerEventIndex = 0; - /** - * angle of that 'triggerEventIndex' event - * todo: Technically we can simply take angle of trigger event from trigger shape by 'triggerEventIndex'? - */ - angle_t triggerEventAngle = 0; angle_t angleOffsetFromTriggerEvent = 0; + + void setAngle(angle_t angle DECLARE_ENGINE_PARAMETER_SUFFIX); }; #define TRIGGER_CHANNEL_COUNT 3 @@ -62,7 +58,7 @@ class trigger_shape_helper { public: trigger_shape_helper(); - SingleWave channels[TRIGGER_CHANNEL_COUNT]; + SingleChannelStateSequence channels[TRIGGER_CHANNEL_COUNT]; private: pin_state_t pinStates[TRIGGER_CHANNEL_COUNT][PWM_PHASE_MAX_COUNT]; }; @@ -76,10 +72,10 @@ class TriggerState; * @brief Trigger shape has all the fields needed to describe and decode trigger signal. * @see TriggerState for trigger decoder state which works based on this trigger shape model */ -class TriggerShape { +class TriggerWaveform { public: - TriggerShape(); - void initializeTriggerShape(Logging *logger, operation_mode_e ambiguousOperationMode, + TriggerWaveform(); + void initializeTriggerWaveform(Logging *logger, operation_mode_e ambiguousOperationMode, bool useOnlyRisingEdgeForTrigger, const trigger_config_s *triggerConfig); void findTriggerPosition(event_trigger_position_s *position, angle_t angle DEFINE_CONFIG_PARAM(angle_t, globalTriggerAngleOffset)); @@ -190,7 +186,7 @@ public: int triggerSignals[PWM_PHASE_MAX_COUNT]; #endif - MultiWave wave; + MultiChannelStateSequence wave; // todo: add a runtime validation which would verify that this field was set properly // todo: maybe even automate this flag calculation? @@ -244,7 +240,7 @@ public: uint32_t getLength() const; int getSize() const; - int getTriggerShapeSynchPointIndex() const; + int getTriggerWaveformSynchPointIndex() const; void prepareShape(); /** @@ -254,7 +250,7 @@ public: angle_t getAngle(int phaseIndex) const; /** - * index of synchronization event within TriggerShape + * index of synchronization event within TriggerWaveform * See findTriggerZeroEventIndex() */ int triggerShapeSynchPointIndex; @@ -287,10 +283,8 @@ private: angle_t getCycleDuration() const; }; -void setToothedWheelConfiguration(TriggerShape *s, int total, int skipped, operation_mode_e operationMode); +void setToothedWheelConfiguration(TriggerWaveform *s, int total, int skipped, operation_mode_e operationMode); -#define TRIGGER_SHAPE(x) ENGINE(triggerCentral.triggerShape.x) +#define TRIGGER_WAVEFORM(x) ENGINE(triggerCentral.triggerShape.x) -#define getTriggerSize() TRIGGER_SHAPE(privateTriggerDefinitionSize) - -#endif /* TRIGGER_STRUCTURE_H_ */ +#define getTriggerSize() TRIGGER_WAVEFORM(privateTriggerDefinitionSize) diff --git a/firmware/controllers/trigger/decoders/trigger_subaru.cpp b/firmware/controllers/trigger/decoders/trigger_subaru.cpp index 9286d2885e..08f25fdb07 100644 --- a/firmware/controllers/trigger/decoders/trigger_subaru.cpp +++ b/firmware/controllers/trigger/decoders/trigger_subaru.cpp @@ -10,7 +10,7 @@ /** * This trigger is also used by Nissan and Mazda */ -void initialize36_2_2_2(TriggerShape *s) { +void initialize36_2_2_2(TriggerWaveform *s) { s->initialize(FOUR_STROKE_CAM_SENSOR, true); float wide = 30 * 2; @@ -46,7 +46,7 @@ void initialize36_2_2_2(TriggerShape *s) { s->useOnlyPrimaryForSync = true; } -void initializeSubaru7_6(TriggerShape *s) { +void initializeSubaru7_6(TriggerWaveform *s) { s->initialize(FOUR_STROKE_CAM_SENSOR, true); float magic = 333; diff --git a/firmware/controllers/trigger/decoders/trigger_subaru.h b/firmware/controllers/trigger/decoders/trigger_subaru.h index 12adf5da55..f82b1fce6c 100644 --- a/firmware/controllers/trigger/decoders/trigger_subaru.h +++ b/firmware/controllers/trigger/decoders/trigger_subaru.h @@ -10,7 +10,7 @@ #include "trigger_structure.h" -void initialize36_2_2_2(TriggerShape *s); -void initializeSubaru7_6(TriggerShape *s); +void initialize36_2_2_2(TriggerWaveform *s); +void initializeSubaru7_6(TriggerWaveform *s); #endif /* CONTROLLERS_TRIGGER_TRIGGER_SUBARU_H_ */ diff --git a/firmware/controllers/trigger/decoders/trigger_toyota.cpp b/firmware/controllers/trigger/decoders/trigger_toyota.cpp index 68e44d47b1..37e36ffbd9 100644 --- a/firmware/controllers/trigger/decoders/trigger_toyota.cpp +++ b/firmware/controllers/trigger/decoders/trigger_toyota.cpp @@ -9,7 +9,7 @@ #include "trigger_toyota.h" -void initialize2jzGE1_12(TriggerShape *s) { +void initialize2jzGE1_12(TriggerWaveform *s) { s->initialize(FOUR_STROKE_CAM_SENSOR, true); float crankD = 360 / 12 / 2; // 15 @@ -43,7 +43,7 @@ void initialize2jzGE1_12(TriggerShape *s) { s->isSynchronizationNeeded = false; } -void initialize2jzGE3_34(TriggerShape *s) { +void initialize2jzGE3_34(TriggerWaveform *s) { setToothedWheelConfiguration(s, 36, 2, FOUR_STROKE_CRANK_SENSOR); // s->initialize(FOUR_STROKE_CAM_SENSOR, true); diff --git a/firmware/controllers/trigger/decoders/trigger_toyota.h b/firmware/controllers/trigger/decoders/trigger_toyota.h index 8b29734398..90fc7cd347 100644 --- a/firmware/controllers/trigger/decoders/trigger_toyota.h +++ b/firmware/controllers/trigger/decoders/trigger_toyota.h @@ -10,7 +10,7 @@ #include "trigger_structure.h" -void initialize2jzGE1_12(TriggerShape *s); -void initialize2jzGE3_34(TriggerShape *s); +void initialize2jzGE1_12(TriggerWaveform *s); +void initialize2jzGE3_34(TriggerWaveform *s); #endif /* CONTROLLERS_TRIGGER_TRIGGER_TOYOTA_H_ */ diff --git a/firmware/controllers/trigger/decoders/trigger_universal.cpp b/firmware/controllers/trigger/decoders/trigger_universal.cpp index 4459eb2d72..3cf56f5957 100644 --- a/firmware/controllers/trigger/decoders/trigger_universal.cpp +++ b/firmware/controllers/trigger/decoders/trigger_universal.cpp @@ -11,7 +11,7 @@ angle_t getEngineCycle(operation_mode_e operationMode) { return operationMode == TWO_STROKE ? 360 : FOUR_STROKE_ENGINE_CYCLE; } -void addSkippedToothTriggerEvents(trigger_wheel_e wheel, TriggerShape *s, int totalTeethCount, int skippedCount, +void addSkippedToothTriggerEvents(trigger_wheel_e wheel, TriggerWaveform *s, int totalTeethCount, int skippedCount, float toothWidth, float offset, float engineCycle, float filterLeft, float filterRight) { efiAssertVoid(CUSTOM_ERR_6586, totalTeethCount > 0, "total count"); efiAssertVoid(CUSTOM_ERR_6587, skippedCount >= 0, "skipped count"); @@ -28,14 +28,14 @@ void addSkippedToothTriggerEvents(trigger_wheel_e wheel, TriggerShape *s, int to s->addEventClamped(offset + engineCycle, wheel, TV_FALL, filterLeft, filterRight); } -void initializeSkippedToothTriggerShapeExt(TriggerShape *s, int totalTeethCount, int skippedCount, +void initializeSkippedToothTriggerWaveformExt(TriggerWaveform *s, int totalTeethCount, int skippedCount, operation_mode_e operationMode) { if (totalTeethCount <= 0) { - warning(CUSTOM_OBD_TRIGGER_SHAPE, "totalTeethCount is zero or less: %d", totalTeethCount); + warning(CUSTOM_OBD_TRIGGER_WAVEFORM, "totalTeethCount is zero or less: %d", totalTeethCount); s->setShapeDefinitionError(true); return; } - efiAssertVoid(CUSTOM_ERR_6588, s != NULL, "TriggerShape is NULL"); + efiAssertVoid(CUSTOM_NULL_SHAPE, s != NULL, "TriggerWaveform is NULL"); s->initialize(operationMode, false); s->setTriggerSynchronizationGap(skippedCount + 1); @@ -46,7 +46,7 @@ void initializeSkippedToothTriggerShapeExt(TriggerShape *s, int totalTeethCount, } -void configureOnePlusOne(TriggerShape *s, operation_mode_e operationMode) { +void configureOnePlusOne(TriggerWaveform *s, operation_mode_e operationMode) { UNUSED(operationMode); s->initialize(FOUR_STROKE_CAM_SENSOR, true); @@ -60,7 +60,7 @@ void configureOnePlusOne(TriggerShape *s, operation_mode_e operationMode) { s->useOnlyPrimaryForSync = true; } -void configureOnePlus60_2(TriggerShape *s, operation_mode_e operationMode) { +void configureOnePlus60_2(TriggerWaveform *s, operation_mode_e operationMode) { UNUSED(operationMode); s->initialize(FOUR_STROKE_CAM_SENSOR, true); @@ -79,7 +79,7 @@ void configureOnePlus60_2(TriggerShape *s, operation_mode_e operationMode) { s->useOnlyPrimaryForSync = true; } -void configure3_1_cam(TriggerShape *s, operation_mode_e operationMode) { +void configure3_1_cam(TriggerWaveform *s, operation_mode_e operationMode) { UNUSED(operationMode); s->initialize(FOUR_STROKE_CAM_SENSOR, true); diff --git a/firmware/controllers/trigger/decoders/trigger_universal.h b/firmware/controllers/trigger/decoders/trigger_universal.h index b5ffd92a92..c40db80179 100644 --- a/firmware/controllers/trigger/decoders/trigger_universal.h +++ b/firmware/controllers/trigger/decoders/trigger_universal.h @@ -14,17 +14,17 @@ #define NO_LEFT_FILTER -1 #define NO_RIGHT_FILTER 1000 -void addSkippedToothTriggerEvents(trigger_wheel_e wheel, TriggerShape *s, +void addSkippedToothTriggerEvents(trigger_wheel_e wheel, TriggerWaveform *s, int totalTeethCount, int skippedCount, float toothWidth, float offset, float engineCycle, float filterLeft, float filterRight); -void initializeSkippedToothTriggerShapeExt(TriggerShape *s, int totalTeethCount, int skippedCount, operation_mode_e operationMode);; +void initializeSkippedToothTriggerWaveformExt(TriggerWaveform *s, int totalTeethCount, int skippedCount, operation_mode_e operationMode);; -void configureOnePlus60_2(TriggerShape *s, operation_mode_e operationMode); +void configureOnePlus60_2(TriggerWaveform *s, operation_mode_e operationMode); -void configure3_1_cam(TriggerShape *s, operation_mode_e operationMode); +void configure3_1_cam(TriggerWaveform *s, operation_mode_e operationMode); -void configureOnePlusOne(TriggerShape *s, operation_mode_e operationMode); +void configureOnePlusOne(TriggerWaveform *s, operation_mode_e operationMode); #endif /* CONTROLLERS_TRIGGER_DECODERS_TRIGGER_UNIVERSAL_H_ */ diff --git a/firmware/controllers/trigger/decoders/trigger_vw.cpp b/firmware/controllers/trigger/decoders/trigger_vw.cpp index ef92ce973b..53d0db2cb7 100644 --- a/firmware/controllers/trigger/decoders/trigger_vw.cpp +++ b/firmware/controllers/trigger/decoders/trigger_vw.cpp @@ -8,8 +8,8 @@ #include "trigger_vw.h" #include "trigger_universal.h" -void setVwConfiguration(TriggerShape *s) { - efiAssertVoid(CUSTOM_ERR_6660, s != NULL, "TriggerShape is NULL"); +void setVwConfiguration(TriggerWaveform *s) { + efiAssertVoid(CUSTOM_ERR_6660, s != NULL, "TriggerWaveform is NULL"); s->initialize(FOUR_STROKE_CRANK_SENSOR, false); diff --git a/firmware/controllers/trigger/decoders/trigger_vw.h b/firmware/controllers/trigger/decoders/trigger_vw.h index 7ae70a39fd..3dcbb2ed23 100644 --- a/firmware/controllers/trigger/decoders/trigger_vw.h +++ b/firmware/controllers/trigger/decoders/trigger_vw.h @@ -10,6 +10,6 @@ #include "trigger_structure.h" -void setVwConfiguration(TriggerShape *s); +void setVwConfiguration(TriggerWaveform *s); #endif /* CONTROLLERS_TRIGGER_DECODERS_TRIGGER_VW_H_ */ diff --git a/firmware/controllers/trigger/trigger.mk b/firmware/controllers/trigger/trigger.mk index f3bf94da84..9aaa261b2d 100644 --- a/firmware/controllers/trigger/trigger.mk +++ b/firmware/controllers/trigger/trigger.mk @@ -1,26 +1,22 @@ TRIGGER_DECODERS_SRC_CPP = \ - $(PROJECT_DIR)/controllers/trigger/decoders/trigger_bmw.cpp \ - $(PROJECT_DIR)/controllers/trigger/decoders/trigger_mazda.cpp \ - $(PROJECT_DIR)/controllers/trigger/decoders/trigger_chrysler.cpp \ - $(PROJECT_DIR)/controllers/trigger/decoders/trigger_structure.cpp \ - $(PROJECT_DIR)/controllers/trigger/trigger_decoder.cpp \ - $(PROJECT_DIR)/controllers/trigger/trigger_simulator.cpp \ - $(PROJECT_DIR)/controllers/trigger/decoders/trigger_mitsubishi.cpp \ - $(PROJECT_DIR)/controllers/trigger/decoders/trigger_nissan.cpp \ - $(PROJECT_DIR)/controllers/trigger/decoders/trigger_subaru.cpp \ - $(PROJECT_DIR)/controllers/trigger/decoders/trigger_toyota.cpp \ - $(PROJECT_DIR)/controllers/trigger/decoders/trigger_gm.cpp \ - $(PROJECT_DIR)/controllers/trigger/decoders/trigger_honda.cpp \ - $(PROJECT_DIR)/controllers/trigger/decoders/trigger_rover.cpp \ - $(PROJECT_DIR)/controllers/trigger/decoders/trigger_vw.cpp \ - $(PROJECT_DIR)/controllers/trigger/decoders/trigger_misc.cpp \ - $(PROJECT_DIR)/controllers/trigger/decoders/trigger_universal.cpp + $(CONTROLLERS_DIR)/trigger/decoders/trigger_bmw.cpp \ + $(CONTROLLERS_DIR)/trigger/decoders/trigger_mazda.cpp \ + $(CONTROLLERS_DIR)/trigger/decoders/trigger_chrysler.cpp \ + $(CONTROLLERS_DIR)/trigger/decoders/trigger_structure.cpp \ + $(CONTROLLERS_DIR)/trigger/trigger_decoder.cpp \ + $(CONTROLLERS_DIR)/trigger/trigger_simulator.cpp \ + $(CONTROLLERS_DIR)/trigger/decoders/trigger_mitsubishi.cpp \ + $(CONTROLLERS_DIR)/trigger/decoders/trigger_nissan.cpp \ + $(CONTROLLERS_DIR)/trigger/decoders/trigger_subaru.cpp \ + $(CONTROLLERS_DIR)/trigger/decoders/trigger_toyota.cpp \ + $(CONTROLLERS_DIR)/trigger/decoders/trigger_gm.cpp \ + $(CONTROLLERS_DIR)/trigger/decoders/trigger_honda.cpp \ + $(CONTROLLERS_DIR)/trigger/decoders/trigger_rover.cpp \ + $(CONTROLLERS_DIR)/trigger/decoders/trigger_vw.cpp \ + $(CONTROLLERS_DIR)/trigger/decoders/trigger_misc.cpp \ + $(CONTROLLERS_DIR)/trigger/decoders/trigger_universal.cpp TRIGGER_SRC_CPP = \ - $(PROJECT_DIR)/controllers/trigger/trigger_emulator_algo.cpp \ - $(PROJECT_DIR)/controllers/trigger/rpm_calculator.cpp \ - $(PROJECT_DIR)/controllers/trigger/trigger_central.cpp \ - $(PROJECT_DIR)/controllers/trigger/spark_logic.cpp \ - $(PROJECT_DIR)/controllers/trigger/main_trigger_callback.cpp \ - $(PROJECT_DIR)/controllers/trigger/aux_valves.cpp + $(CONTROLLERS_DIR)/trigger/trigger_emulator_algo.cpp \ + $(CONTROLLERS_DIR)/trigger/trigger_central.cpp diff --git a/firmware/controllers/trigger/trigger_central.cpp b/firmware/controllers/trigger/trigger_central.cpp index 4aebbc2a19..71ab35c636 100644 --- a/firmware/controllers/trigger/trigger_central.cpp +++ b/firmware/controllers/trigger/trigger_central.cpp @@ -290,12 +290,12 @@ bool TriggerCentral::noiseFilter(efitick_t nowNt, trigger_event_e signal DECLARE efitick_t allowedPeriod = accumSignalPrevPeriods[os]; // but first check if we're expecting a gap - bool isGapExpected = TRIGGER_SHAPE(isSynchronizationNeeded) && triggerState.shaft_is_synchronized && - (triggerState.currentCycle.eventCount[ti] + 1) == TRIGGER_SHAPE(expectedEventCount[ti]); + bool isGapExpected = TRIGGER_WAVEFORM(isSynchronizationNeeded) && triggerState.shaft_is_synchronized && + (triggerState.currentCycle.eventCount[ti] + 1) == TRIGGER_WAVEFORM(expectedEventCount[ti]); if (isGapExpected) { // usually we need to extend the period for gaps, based on the trigger info - allowedPeriod *= TRIGGER_SHAPE(syncRatioAvg); + allowedPeriod *= TRIGGER_WAVEFORM(syncRatioAvg); } // also we need some margin for rapidly changing trigger-wheel speed, @@ -364,7 +364,7 @@ void TriggerCentral::handleShaftSignal(trigger_event_e signal DECLARE_ENGINE_PAR /** * This invocation changes the state of triggerState */ - triggerState.decodeTriggerEvent(signal, nowNt PASS_ENGINE_PARAMETER_SUFFIX); + triggerState.decodeTriggerEvent(nullptr, engine, signal, nowNt PASS_ENGINE_PARAMETER_SUFFIX); /** * If we only have a crank position sensor with four stroke, here we are extending crank revolutions with a 360 degree @@ -430,9 +430,9 @@ EXTERN_ENGINE static void triggerShapeInfo(void) { #if EFI_PROD_CODE || EFI_SIMULATOR - TriggerShape *s = &engine->triggerCentral.triggerShape; - scheduleMsg(logger, "useRise=%s", boolToString(TRIGGER_SHAPE(useRiseEdge))); - scheduleMsg(logger, "gap from %.2f to %.2f", TRIGGER_SHAPE(syncronizationRatioFrom[0]), TRIGGER_SHAPE(syncronizationRatioTo[0])); + TriggerWaveform *s = &engine->triggerCentral.triggerShape; + scheduleMsg(logger, "useRise=%s", boolToString(TRIGGER_WAVEFORM(useRiseEdge))); + scheduleMsg(logger, "gap from %.2f to %.2f", TRIGGER_WAVEFORM(syncronizationRatioFrom[0]), TRIGGER_WAVEFORM(syncronizationRatioTo[0])); for (int i = 0; i < s->getSize(); i++) { scheduleMsg(logger, "event %d %.2f", i, s->eventAngles[i]); @@ -474,8 +474,8 @@ void printAllTriggers() { engineConfiguration->trigger.type = tt; engineConfiguration->ambiguousOperationMode = FOUR_STROKE_CAM_SENSOR; - TriggerShape *s = &engine->triggerCentral.triggerShape; - engine->eInitializeTriggerShape(NULL PASS_ENGINE_PARAMETER_SUFFIX); + TriggerWaveform *s = &engine->triggerCentral.triggerShape; + engine->initializeTriggerWaveform(NULL PASS_ENGINE_PARAMETER_SUFFIX); if (s->shapeDefinitionError) { printf("Trigger error %d\r\n", triggerId); @@ -488,7 +488,7 @@ void printAllTriggers() { for (int i = 0; i < s->getLength(); i++) { - int triggerDefinitionCoordinate = (s->getTriggerShapeSynchPointIndex() + i) % s->getSize(); + int triggerDefinitionCoordinate = (s->getTriggerWaveformSynchPointIndex() + i) % s->getSize(); fprintf(fp, "event %d %d %.2f\n", i, s->triggerSignals[triggerDefinitionCoordinate], s->eventAngles[i]); @@ -546,7 +546,7 @@ extern int icuWidthPeriodCounter; void triggerInfo(void) { #if EFI_PROD_CODE || EFI_SIMULATOR - TriggerShape *ts = &engine->triggerCentral.triggerShape; + TriggerWaveform *ts = &engine->triggerCentral.triggerShape; #if (HAL_TRIGGER_USE_PAL == TRUE) && (PAL_USE_CALLBACKS == TRUE) @@ -562,8 +562,8 @@ void triggerInfo(void) { scheduleMsg(logger, "Template %s (%d) trigger %s (%d) useRiseEdge=%s onlyFront=%s useOnlyFirstChannel=%s tdcOffset=%.2f", getConfigurationName(engineConfiguration->engineType), engineConfiguration->engineType, getTrigger_type_e(engineConfiguration->trigger.type), engineConfiguration->trigger.type, - boolToString(TRIGGER_SHAPE(useRiseEdge)), boolToString(engineConfiguration->useOnlyRisingEdgeForTrigger), - boolToString(engineConfiguration->trigger.useOnlyFirstChannel), TRIGGER_SHAPE(tdcPosition)); + boolToString(TRIGGER_WAVEFORM(useRiseEdge)), boolToString(engineConfiguration->useOnlyRisingEdgeForTrigger), + boolToString(engineConfiguration->trigger.useOnlyFirstChannel), TRIGGER_WAVEFORM(tdcPosition)); if (engineConfiguration->trigger.type == TT_TOOTHED_WHEEL) { scheduleMsg(logger, "total %d/skipped %d", engineConfiguration->trigger.customTotalToothCount, @@ -577,12 +577,12 @@ void triggerInfo(void) { scheduleMsg(logger, "trigger#2 event counters up=%d/down=%d", engine->triggerCentral.getHwEventCounter(2), engine->triggerCentral.getHwEventCounter(3)); } - scheduleMsg(logger, "expected cycle events %d/%d/%d", TRIGGER_SHAPE(expectedEventCount[0]), - TRIGGER_SHAPE(expectedEventCount[1]), TRIGGER_SHAPE(expectedEventCount[2])); + scheduleMsg(logger, "expected cycle events %d/%d/%d", TRIGGER_WAVEFORM(expectedEventCount[0]), + TRIGGER_WAVEFORM(expectedEventCount[1]), TRIGGER_WAVEFORM(expectedEventCount[2])); scheduleMsg(logger, "trigger type=%d/need2ndChannel=%s", engineConfiguration->trigger.type, - boolToString(TRIGGER_SHAPE(needSecondTriggerInput))); - scheduleMsg(logger, "expected duty #0=%.2f/#1=%.2f", TRIGGER_SHAPE(expectedDutyCycle[0]), TRIGGER_SHAPE(expectedDutyCycle[1])); + boolToString(TRIGGER_WAVEFORM(needSecondTriggerInput))); + scheduleMsg(logger, "expected duty #0=%.2f/#1=%.2f", TRIGGER_WAVEFORM(expectedDutyCycle[0]), TRIGGER_WAVEFORM(expectedDutyCycle[1])); scheduleMsg(logger, "synchronizationNeeded=%s/isError=%s/total errors=%d ord_err=%d/total revolutions=%d/self=%s", boolToString(ts->isSynchronizationNeeded), @@ -590,8 +590,8 @@ void triggerInfo(void) { engine->triggerCentral.triggerState.orderingErrorCounter, engine->triggerCentral.triggerState.getTotalRevolutionCounter(), boolToString(engineConfiguration->directSelfStimulation)); - if (TRIGGER_SHAPE(isSynchronizationNeeded)) { - scheduleMsg(logger, "gap from %.2f to %.2f", TRIGGER_SHAPE(syncronizationRatioFrom[0]), TRIGGER_SHAPE(syncronizationRatioTo[0])); + if (TRIGGER_WAVEFORM(isSynchronizationNeeded)) { + scheduleMsg(logger, "gap from %.2f to %.2f", TRIGGER_WAVEFORM(syncronizationRatioFrom[0]), TRIGGER_WAVEFORM(syncronizationRatioTo[0])); } #endif /* EFI_PROD_CODE || EFI_SIMULATOR */ @@ -699,7 +699,7 @@ void onConfigurationChangeTriggerCallback(DECLARE_ENGINE_PARAMETER_SIGNATURE) { assertEngineReference(); #if EFI_ENGINE_CONTROL - ENGINE(eInitializeTriggerShape(logger PASS_ENGINE_PARAMETER_SUFFIX)); + ENGINE(initializeTriggerWaveform(logger PASS_ENGINE_PARAMETER_SUFFIX)); engine->triggerCentral.resetAccumSignalData(); #endif } diff --git a/firmware/controllers/trigger/trigger_central.h b/firmware/controllers/trigger/trigger_central.h index 375336da81..792feb997c 100644 --- a/firmware/controllers/trigger/trigger_central.h +++ b/firmware/controllers/trigger/trigger_central.h @@ -41,7 +41,7 @@ public: */ efitick_t timeAtVirtualZeroNt = 0; - TriggerShape triggerShape; + TriggerWaveform triggerShape; efitick_t previousVvtCamTime = 0; efitick_t previousVvtCamDuration = 0; diff --git a/firmware/controllers/trigger/trigger_decoder.cpp b/firmware/controllers/trigger/trigger_decoder.cpp index ebeaeff561..da07d6816b 100644 --- a/firmware/controllers/trigger/trigger_decoder.cpp +++ b/firmware/controllers/trigger/trigger_decoder.cpp @@ -59,7 +59,6 @@ void TriggerState::setShaftSynchronized(bool value) { } void TriggerState::resetTriggerState() { - triggerCycleCallback = nullptr; setShaftSynchronized(false); toothed_previous_time = 0; @@ -121,7 +120,7 @@ bool isTriggerDecoderError(void) { return errorDetection.sum(6) > 4; } -void calculateTriggerSynchPoint(TriggerShape *shape, TriggerState *state DECLARE_ENGINE_PARAMETER_SUFFIX) { +void calculateTriggerSynchPoint(TriggerWaveform *shape, TriggerState *state DECLARE_ENGINE_PARAMETER_SUFFIX) { #if EFI_PROD_CODE efiAssertVoid(CUSTOM_ERR_6642, getCurrentRemainingStack() > 256, "calc s"); #endif @@ -133,7 +132,7 @@ void calculateTriggerSynchPoint(TriggerShape *shape, TriggerState *state DECLARE engine->engineCycleEventCount = length; efiAssertVoid(CUSTOM_SHAPE_LEN_ZERO, length > 0, "shapeLength=0"); if (length >= PWM_PHASE_MAX_COUNT) { - warning(CUSTOM_ERR_TRIGGER_SHAPE_TOO_LONG, "Count above %d", length); + warning(CUSTOM_ERR_TRIGGER_WAVEFORM_TOO_LONG, "Count above %d", length); shape->setShapeDefinitionError(true); return; } @@ -195,7 +194,7 @@ float TriggerStateWithRunningStatistics::calculateInstantRpm(int *prevIndexOut, /** * Here we calculate RPM based on last 90 degrees */ - angle_t currentAngle = TRIGGER_SHAPE(eventAngles[current_index]); + angle_t currentAngle = TRIGGER_WAVEFORM(eventAngles[current_index]); // todo: make this '90' depend on cylinder count or trigger shape? if (cisnan(currentAngle)) { return NOISY_RPM; @@ -203,14 +202,14 @@ float TriggerStateWithRunningStatistics::calculateInstantRpm(int *prevIndexOut, angle_t previousAngle = currentAngle - 90; fixAngle(previousAngle, "prevAngle", CUSTOM_ERR_TRIGGER_ANGLE_RANGE); // todo: prevIndex should be pre-calculated - int prevIndex = TRIGGER_SHAPE(triggerIndexByAngle[(int)previousAngle]); + int prevIndex = TRIGGER_WAVEFORM(triggerIndexByAngle[(int)previousAngle]); if (prevIndexOut != NULL) { *prevIndexOut = prevIndex; } // now let's get precise angle for that event - angle_t prevIndexAngle = TRIGGER_SHAPE(eventAngles[prevIndex]); + angle_t prevIndexAngle = TRIGGER_WAVEFORM(eventAngles[prevIndex]); efitick_t time90ago = timeOfLastEvent[prevIndex]; if (time90ago == 0) { return prevInstantRpmValue; @@ -260,7 +259,7 @@ void TriggerStateWithRunningStatistics::runtimeStatistics(efitime_t nowNt DECLAR instantRpm = calculateInstantRpm(&prevIndex, nowNt PASS_ENGINE_PARAMETER_SUFFIX); #if EFI_SENSOR_CHART - angle_t currentAngle = TRIGGER_SHAPE(eventAngles[currentCycle.current_index]); + angle_t currentAngle = TRIGGER_WAVEFORM(eventAngles[currentCycle.current_index]); if (CONFIGB(sensorChartMode) == SC_DETAILED_RPM) { scAddData(currentAngle, instantRpm); } else { @@ -304,10 +303,10 @@ static trigger_value_e eventType[6] = { TV_FALL, TV_RISE, TV_FALL, TV_RISE, TV_F PRINT_INC_INDEX; \ } -#define considerEventForGap() (!TRIGGER_SHAPE(useOnlyPrimaryForSync) || isPrimary) +#define considerEventForGap() (!TRIGGER_WAVEFORM(useOnlyPrimaryForSync) || isPrimary) -#define needToSkipFall(type) ((!TRIGGER_SHAPE(gapBothDirections)) && (( TRIGGER_SHAPE(useRiseEdge)) && (type != TV_RISE))) -#define needToSkipRise(type) ((!TRIGGER_SHAPE(gapBothDirections)) && ((!TRIGGER_SHAPE(useRiseEdge)) && (type != TV_FALL))) +#define needToSkipFall(type) ((!TRIGGER_WAVEFORM(gapBothDirections)) && (( TRIGGER_WAVEFORM(useRiseEdge)) && (type != TV_RISE))) +#define needToSkipRise(type) ((!TRIGGER_WAVEFORM(gapBothDirections)) && ((!TRIGGER_WAVEFORM(useRiseEdge)) && (type != TV_FALL))) int TriggerState::getCurrentIndex() const { return currentCycle.current_index; @@ -339,16 +338,16 @@ void TriggerState::onSynchronizationLost(DECLARE_ENGINE_PARAMETER_SIGNATURE) { } bool TriggerState::validateEventCounters(DECLARE_ENGINE_PARAMETER_SIGNATURE) const { - bool isDecodingError = currentCycle.eventCount[0] != TRIGGER_SHAPE(expectedEventCount[0]) - || currentCycle.eventCount[1] != TRIGGER_SHAPE(expectedEventCount[1]) - || currentCycle.eventCount[2] != TRIGGER_SHAPE(expectedEventCount[2]); + bool isDecodingError = currentCycle.eventCount[0] != TRIGGER_WAVEFORM(expectedEventCount[0]) + || currentCycle.eventCount[1] != TRIGGER_WAVEFORM(expectedEventCount[1]) + || currentCycle.eventCount[2] != TRIGGER_WAVEFORM(expectedEventCount[2]); #if EFI_UNIT_TEST - printf("sync point: isDecodingError=%d isInit=%d\r\n", isDecodingError, engine->isInitializingTrigger); + printf("sync point: isDecodingError=%d\r\n", isDecodingError); if (isDecodingError) { - printf("count: cur=%d exp=%d\r\n", currentCycle.eventCount[0], TRIGGER_SHAPE(expectedEventCount[0])); - printf("count: cur=%d exp=%d\r\n", currentCycle.eventCount[1], TRIGGER_SHAPE(expectedEventCount[1])); - printf("count: cur=%d exp=%d\r\n", currentCycle.eventCount[2], TRIGGER_SHAPE(expectedEventCount[2])); + printf("count: cur=%d exp=%d\r\n", currentCycle.eventCount[0], TRIGGER_WAVEFORM(expectedEventCount[0])); + printf("count: cur=%d exp=%d\r\n", currentCycle.eventCount[1], TRIGGER_WAVEFORM(expectedEventCount[1])); + printf("count: cur=%d exp=%d\r\n", currentCycle.eventCount[2], TRIGGER_WAVEFORM(expectedEventCount[2])); } #endif /* EFI_UNIT_TEST */ @@ -368,9 +367,9 @@ void TriggerState::handleTriggerError(DECLARE_ENGINE_PARAMETER_SIGNATURE) { currentCycle.eventCount[0], currentCycle.eventCount[1], currentCycle.eventCount[2], - TRIGGER_SHAPE(expectedEventCount[0]), - TRIGGER_SHAPE(expectedEventCount[1]), - TRIGGER_SHAPE(expectedEventCount[2])); + TRIGGER_WAVEFORM(expectedEventCount[0]), + TRIGGER_WAVEFORM(expectedEventCount[1]), + TRIGGER_WAVEFORM(expectedEventCount[2])); lastDecodingErrorTime = getTimeNowNt(); someSortOfTriggerError = true; @@ -378,14 +377,15 @@ void TriggerState::handleTriggerError(DECLARE_ENGINE_PARAMETER_SIGNATURE) { if (CONFIG(verboseTriggerSynchDetails) || (someSortOfTriggerError && !CONFIG(silentTriggerError))) { #if EFI_PROD_CODE scheduleMsg(logger, "error: synchronizationPoint @ index %d expected %d/%d/%d got %d/%d/%d", - currentCycle.current_index, TRIGGER_SHAPE(expectedEventCount[0]), - TRIGGER_SHAPE(expectedEventCount[1]), TRIGGER_SHAPE(expectedEventCount[2]), + currentCycle.current_index, TRIGGER_WAVEFORM(expectedEventCount[0]), + TRIGGER_WAVEFORM(expectedEventCount[1]), TRIGGER_WAVEFORM(expectedEventCount[2]), currentCycle.eventCount[0], currentCycle.eventCount[1], currentCycle.eventCount[2]); #endif /* EFI_PROD_CODE */ } } -void TriggerState::onShaftSynchronization(efitime_t nowNt, trigger_wheel_e triggerWheel DECLARE_ENGINE_PARAMETER_SUFFIX) { +void TriggerState::onShaftSynchronization(const TriggerStateCallback triggerCycleCallback, + efitime_t nowNt, trigger_wheel_e triggerWheel DECLARE_ENGINE_PARAMETER_SUFFIX) { setShaftSynchronized(true); // this call would update duty cycle values nextTriggerEvent() @@ -416,12 +416,14 @@ void TriggerState::onShaftSynchronization(efitime_t nowNt, trigger_wheel_e trigg * @param signal type of event which just happened * @param nowNt current time */ -void TriggerState::decodeTriggerEvent(trigger_event_e const signal, efitime_t nowNt DECLARE_ENGINE_PARAMETER_SUFFIX) { +void TriggerState::decodeTriggerEvent(const TriggerStateCallback triggerCycleCallback, + TriggerStateListener * triggerStateListener, + trigger_event_e const signal, efitime_t nowNt DECLARE_ENGINE_PARAMETER_SUFFIX) { ScopePerf perf(PE::DecodeTriggerEvent, static_cast(signal)); bool useOnlyRisingEdgeForTrigger = CONFIG(useOnlyRisingEdgeForTrigger); - // todo: use 'triggerShape' instead of TRIGGER_SHAPE in order to decouple this method from engine #635 - TriggerShape *triggerShape = &ENGINE(triggerCentral.triggerShape); + // todo: use 'triggerShape' instead of TRIGGER_WAVEFORM in order to decouple this method from engine #635 + TriggerWaveform *triggerShape = &ENGINE(triggerCentral.triggerShape); efiAssertVoid(CUSTOM_ERR_6640, signal <= SHAFT_3RD_RISING, "unexpected signal"); @@ -448,15 +450,16 @@ void TriggerState::decodeTriggerEvent(trigger_event_e const signal, efitime_t no toothDurations[0] = currentDurationLong > 10 * US2NT(US_PER_SECOND_LL) ? 10 * US2NT(US_PER_SECOND_LL) : currentDurationLong; + bool haveListener = triggerStateListener != NULL; bool isPrimary = triggerWheel == T_PRIMARY; if (needToSkipFall(type) || needToSkipRise(type) || (!considerEventForGap())) { #if EFI_UNIT_TEST if (printTriggerDebug) { - printf("%s isLessImportant %s now=%lld index=%d\r\n", + printf("%s isLessImportant %s now=%d index=%d\r\n", getTrigger_type_e(engineConfiguration->trigger.type), getTrigger_event_e(signal), - nowNt, + (int)nowNt, currentCycle.current_index); } #endif /* EFI_UNIT_TEST */ @@ -533,7 +536,7 @@ void TriggerState::decodeTriggerEvent(trigger_event_e const signal, efitime_t no bool isSync = true; for (int i = 0;isyncronizationRatioFrom[i]) || (toothDurations[i] > toothDurations[i + 1] * TRIGGER_SHAPE(syncronizationRatioFrom[i]) + bool isGapCondition = cisnan(triggerShape->syncronizationRatioFrom[i]) || (toothDurations[i] > toothDurations[i + 1] * TRIGGER_WAVEFORM(syncronizationRatioFrom[i]) && toothDurations[i] < toothDurations[i + 1] * triggerShape->syncronizationRatioTo[i]); isSync &= isGapCondition; @@ -568,8 +571,8 @@ void TriggerState::decodeTriggerEvent(trigger_event_e const signal, efitime_t no /* cast is needed to make sure we do not put 64 bit value to stack*/ (int)getTimeNowSeconds(), i, gap, - TRIGGER_SHAPE(syncronizationRatioFrom[i]), - TRIGGER_SHAPE(syncronizationRatioTo[i]), + TRIGGER_WAVEFORM(syncronizationRatioFrom[i]), + TRIGGER_WAVEFORM(syncronizationRatioTo[i]), boolToString(someSortOfTriggerError)); } } @@ -582,8 +585,8 @@ void TriggerState::decodeTriggerEvent(trigger_event_e const signal, efitime_t no print("index=%d: gap=%.2f expected from %.2f to %.2f error=%s\r\n", i, gap, - TRIGGER_SHAPE(syncronizationRatioFrom[i]), - TRIGGER_SHAPE(syncronizationRatioTo[i]), + TRIGGER_WAVEFORM(syncronizationRatioFrom[i]), + TRIGGER_WAVEFORM(syncronizationRatioTo[i]), boolToString(someSortOfTriggerError)); } } @@ -646,21 +649,23 @@ void TriggerState::decodeTriggerEvent(trigger_event_e const signal, efitime_t no enginePins.triggerDecoderErrorPin.setValue(isDecodingError); - if (isDecodingError && !engine->isInitializingTrigger) { - handleTriggerError(PASS_ENGINE_PARAMETER_SIGNATURE); + // 'haveListener' means we are running a real engine and now just preparing trigger shape + // that's a bit of a hack, a sweet OOP solution would be a real callback or at least 'needDecodingErrorLogic' method? + if (isDecodingError && haveListener) { + triggerStateListener->OnTriggerStateDecodingError(); } errorDetection.add(isDecodingError); if (isTriggerDecoderError()) { warning(CUSTOM_OBD_TRG_DECODING, "trigger decoding issue. expected %d/%d/%d got %d/%d/%d", - TRIGGER_SHAPE(expectedEventCount[0]), TRIGGER_SHAPE(expectedEventCount[1]), - TRIGGER_SHAPE(expectedEventCount[2]), currentCycle.eventCount[0], currentCycle.eventCount[1], + TRIGGER_WAVEFORM(expectedEventCount[0]), TRIGGER_WAVEFORM(expectedEventCount[1]), + TRIGGER_WAVEFORM(expectedEventCount[2]), currentCycle.eventCount[0], currentCycle.eventCount[1], currentCycle.eventCount[2]); } } - onShaftSynchronization(nowNt, triggerWheel PASS_ENGINE_PARAMETER_SUFFIX); + onShaftSynchronization(triggerCycleCallback, nowNt, triggerWheel PASS_ENGINE_PARAMETER_SUFFIX); } else { /* if (!isSynchronizationPoint) */ nextTriggerEvent() @@ -673,7 +678,7 @@ void TriggerState::decodeTriggerEvent(trigger_event_e const signal, efitime_t no toothed_previous_time = nowNt; } - if (!isValidIndex(PASS_ENGINE_PARAMETER_SIGNATURE) && !engine->isInitializingTrigger) { + if (!isValidIndex(PASS_ENGINE_PARAMETER_SIGNATURE) && haveListener) { // let's not show a warning if we are just starting to spin if (GET_RPM_VALUE != 0) { warning(CUSTOM_SYNC_ERROR, "sync error: index #%d above total size %d", currentCycle.current_index, getTriggerSize()); @@ -690,8 +695,8 @@ void TriggerState::decodeTriggerEvent(trigger_event_e const signal, efitime_t no runtimeStatistics(nowNt PASS_ENGINE_PARAMETER_SUFFIX); // Needed for early instant-RPM detection - if (!engine->isInitializingTrigger) { - engine->rpmCalculator.setSpinningUp(nowNt PASS_ENGINE_PARAMETER_SUFFIX); + if (haveListener) { + triggerStateListener->OnTriggerStateProperState(nowNt); } } @@ -706,9 +711,9 @@ static void onFindIndexCallback(TriggerState *state) { * Trigger shape is defined in a way which is convenient for trigger shape definition * On the other hand, trigger decoder indexing begins from synchronization event. * - * This function finds the index of synchronization event within TriggerShape + * This function finds the index of synchronization event within TriggerWaveform */ -uint32_t findTriggerZeroEventIndex(TriggerState *state, TriggerShape * shape, +uint32_t findTriggerZeroEventIndex(TriggerState *state, TriggerWaveform * shape, trigger_config_s const*triggerConfig DECLARE_ENGINE_PARAMETER_SUFFIX) { UNUSED(triggerConfig); #if EFI_PROD_CODE @@ -723,14 +728,12 @@ uint32_t findTriggerZeroEventIndex(TriggerState *state, TriggerShape * shape, return 0; } - engine->isInitializingTrigger = true; // todo: should this variable be declared 'static' to reduce stack usage? TriggerStimulatorHelper helper; uint32_t syncIndex = helper.findTriggerSyncPoint(shape, state PASS_ENGINE_PARAMETER_SUFFIX); if (syncIndex == EFI_ERROR_CODE) { - engine->isInitializingTrigger = false; return syncIndex; } efiAssert(CUSTOM_ERR_ASSERT, state->getTotalRevolutionCounter() == 1, "findZero_revCounter", EFI_ERROR_CODE); @@ -747,11 +750,9 @@ uint32_t findTriggerZeroEventIndex(TriggerState *state, TriggerShape * shape, * * todo: add a comment why are we doing '2 * shape->getSize()' here? */ - state->triggerCycleCallback = onFindIndexCallback; - helper.assertSyncPositionAndSetDutyCycle(syncIndex, state, shape PASS_ENGINE_PARAMETER_SUFFIX); + helper.assertSyncPositionAndSetDutyCycle(onFindIndexCallback, syncIndex, state, shape PASS_ENGINE_PARAMETER_SUFFIX); - engine->isInitializingTrigger = false; return syncIndex % shape->getSize(); } diff --git a/firmware/controllers/trigger/trigger_decoder.h b/firmware/controllers/trigger/trigger_decoder.h index c9f69c52d1..53b1a8dc04 100644 --- a/firmware/controllers/trigger/trigger_decoder.h +++ b/firmware/controllers/trigger/trigger_decoder.h @@ -2,11 +2,10 @@ * @file trigger_decoder.h * * @date Dec 24, 2013 - * @author Andrey Belomutskiy, (c) 2012-2017 + * @author Andrey Belomutskiy, (c) 2012-2019 */ -#ifndef TRIGGER_DECODER_H_ -#define TRIGGER_DECODER_H_ +#pragma once #include "global.h" #include "trigger_structure.h" @@ -15,6 +14,12 @@ class TriggerState; +class TriggerStateListener { + public: + virtual void OnTriggerStateDecodingError() = 0; + virtual void OnTriggerStateProperState(efitick_t nowNt) = 0; +}; + typedef void (*TriggerStateCallback)(TriggerState *); typedef struct { @@ -25,7 +30,7 @@ typedef struct { /** * Number of actual events of each channel within current trigger cycle, these * values are used to detect trigger signal errors. - * see TriggerShape + * see TriggerWaveform */ uint32_t eventCount[PWM_PHASE_MAX_WAVE_PER_PWM]; /** @@ -43,7 +48,7 @@ typedef struct { } current_cycle_state_s; /** - * @see TriggerShape for trigger wheel shape definition + * @see TriggerWaveform for trigger wheel shape definition */ class TriggerState : public trigger_state_s { public: @@ -59,10 +64,15 @@ public: bool isEvenRevolution() const; void incrementTotalEventCounter(); efitime_t getTotalEventCounter() const; - void decodeTriggerEvent(trigger_event_e const signal, efitime_t nowUs DECLARE_ENGINE_PARAMETER_SUFFIX); + + void decodeTriggerEvent(const TriggerStateCallback triggerCycleCallback, + TriggerStateListener * triggerStateListener, + trigger_event_e const signal, efitime_t nowUs DECLARE_ENGINE_PARAMETER_SUFFIX); + bool validateEventCounters(DECLARE_ENGINE_PARAMETER_SIGNATURE) const; void handleTriggerError(DECLARE_ENGINE_PARAMETER_SIGNATURE); - void onShaftSynchronization(efitime_t nowNt, trigger_wheel_e triggerWheel DECLARE_ENGINE_PARAMETER_SUFFIX); + void onShaftSynchronization(const TriggerStateCallback triggerCycleCallback, + efitime_t nowNt, trigger_wheel_e triggerWheel DECLARE_ENGINE_PARAMETER_SUFFIX); /** * Resets synchronization flag and alerts rpm_calculator to reset engine spinning flag. */ @@ -70,7 +80,6 @@ public: bool isValidIndex(DECLARE_ENGINE_PARAMETER_SIGNATURE) const; float getTriggerDutyCycle(int index); - TriggerStateCallback triggerCycleCallback; /** * TRUE if we know where we are @@ -126,7 +135,7 @@ private: /** - * the reason for sub-class is simply to save RAM but not having statisics in the trigger initialization instance + * the reason for sub-class is simply to save RAM but not having statistics in the trigger initialization instance */ class TriggerStateWithRunningStatistics : public TriggerState { public: @@ -161,7 +170,7 @@ public: }; angle_t getEngineCycle(operation_mode_e operationMode); -uint32_t findTriggerZeroEventIndex(TriggerState *state, TriggerShape * shape, trigger_config_s const*triggerConfig DECLARE_ENGINE_PARAMETER_SUFFIX); +uint32_t findTriggerZeroEventIndex(TriggerState *state, TriggerWaveform * shape, trigger_config_s const*triggerConfig DECLARE_ENGINE_PARAMETER_SUFFIX); class Engine; @@ -170,7 +179,5 @@ void initTriggerDecoderLogger(Logging *sharedLogger); bool isTriggerDecoderError(void); -void calculateTriggerSynchPoint(TriggerShape *shape, TriggerState *state DECLARE_ENGINE_PARAMETER_SUFFIX); +void calculateTriggerSynchPoint(TriggerWaveform *shape, TriggerState *state DECLARE_ENGINE_PARAMETER_SUFFIX); - -#endif /* TRIGGER_DECODER_H_ */ diff --git a/firmware/controllers/trigger/trigger_emulator_algo.cpp b/firmware/controllers/trigger/trigger_emulator_algo.cpp index c1d99c845a..c022a79f66 100644 --- a/firmware/controllers/trigger/trigger_emulator_algo.cpp +++ b/firmware/controllers/trigger/trigger_emulator_algo.cpp @@ -2,7 +2,7 @@ * @file trigger_emulator_algo.cpp * * This file is about producing real electrical signals which emulate trigger signal based on - * a known TriggerShape. + * a known TriggerWaveform. * * Historically this implementation was implemented based on PwmConfig which is maybe not the * best way to implement it. (todo: why is not the best way?) @@ -13,18 +13,18 @@ * @date Mar 3, 2014 * @author Andrey Belomutskiy, (c) 2012-2018 */ +#include "state_sequence.h" #include "global.h" #include "efi_gpio.h" -#include "efi_wave.h" int getPreviousIndex(const int currentIndex, const int size) { return (currentIndex + size - 1) % size; } -bool needEvent(const int currentIndex, const int size, MultiWave *multiWave, int channelIndex) { +bool needEvent(const int currentIndex, const int size, MultiChannelStateSequence *multiChannelStateSequence, int channelIndex) { int prevIndex = getPreviousIndex(currentIndex, size); - pin_state_t previousValue = multiWave->getChannelState(channelIndex, /*phaseIndex*/prevIndex); - pin_state_t currentValue = multiWave->getChannelState(channelIndex, /*phaseIndex*/currentIndex); + pin_state_t previousValue = multiChannelStateSequence->getChannelState(channelIndex, /*phaseIndex*/prevIndex); + pin_state_t currentValue = multiChannelStateSequence->getChannelState(channelIndex, /*phaseIndex*/currentIndex); return previousValue != currentValue; } @@ -46,20 +46,20 @@ EXTERN_ENGINE void TriggerEmulatorHelper::handleEmulatorCallback(PwmConfig *state, int stateIndex) { // todo: code duplication with TriggerStimulatorHelper::feedSimulatedEvent? - MultiWave *multiWave = &state->multiWave; + MultiChannelStateSequence *multiChannelStateSequence = &state->multiChannelStateSequence; - if (needEvent(stateIndex, state->phaseCount, &state->multiWave, 0)) { - pin_state_t currentValue = multiWave->getChannelState(/*phaseIndex*/0, stateIndex); + if (needEvent(stateIndex, state->phaseCount, &state->multiChannelStateSequence, 0)) { + pin_state_t currentValue = multiChannelStateSequence->getChannelState(/*phaseIndex*/0, stateIndex); hwHandleShaftSignal(currentValue ? SHAFT_PRIMARY_RISING : SHAFT_PRIMARY_FALLING); } - if (needEvent(stateIndex, state->phaseCount, &state->multiWave, 1)) { - pin_state_t currentValue = multiWave->getChannelState(/*phaseIndex*/1, stateIndex); + if (needEvent(stateIndex, state->phaseCount, &state->multiChannelStateSequence, 1)) { + pin_state_t currentValue = multiChannelStateSequence->getChannelState(/*phaseIndex*/1, stateIndex); hwHandleShaftSignal(currentValue ? SHAFT_SECONDARY_RISING : SHAFT_SECONDARY_FALLING); } - if (needEvent(stateIndex, state->phaseCount, &state->multiWave, 2)) { - pin_state_t currentValue = multiWave->getChannelState(/*phaseIndex*/2, stateIndex); + if (needEvent(stateIndex, state->phaseCount, &state->multiChannelStateSequence, 2)) { + pin_state_t currentValue = multiChannelStateSequence->getChannelState(/*phaseIndex*/2, stateIndex); hwHandleShaftSignal(currentValue ? SHAFT_3RD_RISING : SHAFT_3RD_FALLING); } @@ -73,9 +73,9 @@ void TriggerEmulatorHelper::handleEmulatorCallback(PwmConfig *state, int stateIn static pin_state_t pinStates1[PWM_PHASE_MAX_COUNT]; static pin_state_t pinStates2[PWM_PHASE_MAX_COUNT]; static pin_state_t pinStates3[PWM_PHASE_MAX_COUNT]; -static SingleWave waves[PWM_PHASE_MAX_WAVE_PER_PWM] = { SingleWave(pinStates1), SingleWave(pinStates2), - SingleWave(pinStates3) }; -static SingleWave sr[PWM_PHASE_MAX_WAVE_PER_PWM] = { waves[0], waves[1], waves[2] }; +static SingleChannelStateSequence waves[PWM_PHASE_MAX_WAVE_PER_PWM] = { SingleChannelStateSequence(pinStates1), SingleChannelStateSequence(pinStates2), + SingleChannelStateSequence(pinStates3) }; +static SingleChannelStateSequence sr[PWM_PHASE_MAX_WAVE_PER_PWM] = { waves[0], waves[1], waves[2] }; static float switchTimesBuffer[PWM_PHASE_MAX_COUNT]; @@ -115,14 +115,14 @@ void setTriggerEmulatorRPM(int rpm DECLARE_ENGINE_PARAMETER_SUFFIX) { scheduleMsg(logger, "Emulating position sensor(s). RPM=%d", rpm); } -static void updateTriggerShapeIfNeeded(PwmConfig *state) { +static void updateTriggerWaveformIfNeeded(PwmConfig *state) { if (atTriggerVersion < engine->triggerCentral.triggerShape.version) { atTriggerVersion = engine->triggerCentral.triggerShape.version; scheduleMsg(logger, "Stimulator: updating trigger shape: %d/%d %d", atTriggerVersion, engine->getGlobalConfigurationVersion(), currentTimeMillis()); - TriggerShape *s = &engine->triggerCentral.triggerShape; + TriggerWaveform *s = &engine->triggerCentral.triggerShape; pin_state_t *pinStates[PWM_PHASE_MAX_WAVE_PER_PWM] = { s->wave.channels[0].pinStates, s->wave.channels[1].pinStates, @@ -164,7 +164,7 @@ static void resumeStimulator() { void initTriggerEmulatorLogic(Logging *sharedLogger DECLARE_ENGINE_PARAMETER_SUFFIX) { logger = sharedLogger; - TriggerShape *s = &engine->triggerCentral.triggerShape; + TriggerWaveform *s = &engine->triggerCentral.triggerShape; setTriggerEmulatorRPM(engineConfiguration->bc.triggerSimulatorFrequency PASS_ENGINE_PARAMETER_SUFFIX); pin_state_t *pinStates[PWM_PHASE_MAX_WAVE_PER_PWM] = { s->wave.channels[0].pinStates, @@ -173,7 +173,7 @@ void initTriggerEmulatorLogic(Logging *sharedLogger DECLARE_ENGINE_PARAMETER_SUF triggerSignal.weComplexInit("position sensor", &engine->executor, s->getSize(), s->wave.switchTimes, PWM_PHASE_MAX_WAVE_PER_PWM, - pinStates, updateTriggerShapeIfNeeded, (pwm_gen_callback*)emulatorApplyPinState); + pinStates, updateTriggerWaveformIfNeeded, (pwm_gen_callback*)emulatorApplyPinState); addConsoleActionI("rpm", setTriggerEmulatorRPM); addConsoleActionI("stop_stimulator_at_index", setEmulatorAtIndex); diff --git a/firmware/controllers/trigger/trigger_emulator_algo.h b/firmware/controllers/trigger/trigger_emulator_algo.h index edba7e98e7..8cfe0fa118 100644 --- a/firmware/controllers/trigger/trigger_emulator_algo.h +++ b/firmware/controllers/trigger/trigger_emulator_algo.h @@ -20,6 +20,6 @@ public: void initTriggerEmulatorLogic(Logging *sharedLogger DECLARE_ENGINE_PARAMETER_SUFFIX); int getPreviousIndex(const int currentIndex, const int size); -bool needEvent(const int currentIndex, const int size, MultiWave *multiWave, int channelIndex); +bool needEvent(const int currentIndex, const int size, MultiChannelStateSequence *multiChannelStateSequence, int channelIndex); #endif /* TRIGGER_EMULATOR_ALGO_H_ */ diff --git a/firmware/controllers/trigger/trigger_simulator.cpp b/firmware/controllers/trigger/trigger_simulator.cpp index 963bfee0b8..2596e9846b 100644 --- a/firmware/controllers/trigger/trigger_simulator.cpp +++ b/firmware/controllers/trigger/trigger_simulator.cpp @@ -14,9 +14,6 @@ EXTERN_ENGINE; -TriggerStimulatorHelper::TriggerStimulatorHelper() { -} - // this is not the only place where we have 'isUpEvent'. todo: reuse static const bool isRisingEdge[6] = { false, true, false, true, false, true }; @@ -29,7 +26,8 @@ bool isUsefulSignal(trigger_event_e signal DECLARE_ENGINE_PARAMETER_SUFFIX) { extern bool printTriggerDebug; #endif /* ! EFI_UNIT_TEST */ -void TriggerStimulatorHelper::feedSimulatedEvent(TriggerState *state, TriggerShape * shape, int i +void TriggerStimulatorHelper::feedSimulatedEvent(const TriggerStateCallback triggerCycleCallback, + TriggerState *state, TriggerWaveform * shape, int i DECLARE_ENGINE_PARAMETER_SUFFIX) { efiAssertVoid(CUSTOM_ERR_6593, shape->getSize() > 0, "size not zero"); int stateIndex = i % shape->getSize(); @@ -39,19 +37,19 @@ void TriggerStimulatorHelper::feedSimulatedEvent(TriggerState *state, TriggerSha int time = (int) (SIMULATION_CYCLE_PERIOD * (loopIndex + shape->wave.getSwitchTime(stateIndex))); - MultiWave *multiWave = &shape->wave; + MultiChannelStateSequence *multiChannelStateSequence = &shape->wave; #if EFI_UNIT_TEST int prevIndex = getPreviousIndex(stateIndex, shape->getSize()); - pin_state_t primaryWheelState = multiWave->getChannelState(0, prevIndex); - pin_state_t newPrimaryWheelState = multiWave->getChannelState(0, stateIndex); + pin_state_t primaryWheelState = multiChannelStateSequence->getChannelState(0, prevIndex); + pin_state_t newPrimaryWheelState = multiChannelStateSequence->getChannelState(0, stateIndex); - pin_state_t secondaryWheelState = multiWave->getChannelState(1, prevIndex); - pin_state_t newSecondaryWheelState = multiWave->getChannelState(1, stateIndex); + pin_state_t secondaryWheelState = multiChannelStateSequence->getChannelState(1, prevIndex); + pin_state_t newSecondaryWheelState = multiChannelStateSequence->getChannelState(1, stateIndex); -// pin_state_t thirdWheelState = multiWave->getChannelState(2, prevIndex); -// pin_state_t new3rdWheelState = multiWave->getChannelState(2, stateIndex); +// pin_state_t thirdWheelState = multiChannelStateSequence->getChannelState(2, prevIndex); +// pin_state_t new3rdWheelState = multiChannelStateSequence->getChannelState(2, stateIndex); if (printTriggerDebug) { printf("feedSimulatedEvent: %d>%d primary %d>%d secondary %d>%d\r\n", prevIndex, stateIndex, primaryWheelState, newPrimaryWheelState, @@ -62,40 +60,50 @@ void TriggerStimulatorHelper::feedSimulatedEvent(TriggerState *state, TriggerSha // todo: code duplication with TriggerEmulatorHelper::handleEmulatorCallback? - if (needEvent(stateIndex, size, multiWave, 0)) { - pin_state_t currentValue = multiWave->getChannelState(/*phaseIndex*/0, stateIndex); + if (needEvent(stateIndex, size, multiChannelStateSequence, 0)) { + pin_state_t currentValue = multiChannelStateSequence->getChannelState(/*phaseIndex*/0, stateIndex); trigger_event_e s = currentValue ? SHAFT_PRIMARY_RISING : SHAFT_PRIMARY_FALLING; - if (isUsefulSignal(s PASS_ENGINE_PARAMETER_SUFFIX)) - state->decodeTriggerEvent(s, time PASS_ENGINE_PARAMETER_SUFFIX); + if (isUsefulSignal(s PASS_ENGINE_PARAMETER_SUFFIX)) { + state->decodeTriggerEvent(triggerCycleCallback, + /* override */ nullptr, + s, time PASS_ENGINE_PARAMETER_SUFFIX); + } } - if (needEvent(stateIndex, size, multiWave, 1)) { - pin_state_t currentValue = multiWave->getChannelState(/*phaseIndex*/1, stateIndex); + if (needEvent(stateIndex, size, multiChannelStateSequence, 1)) { + pin_state_t currentValue = multiChannelStateSequence->getChannelState(/*phaseIndex*/1, stateIndex); trigger_event_e s = currentValue ? SHAFT_SECONDARY_RISING : SHAFT_SECONDARY_FALLING; - if (isUsefulSignal(s PASS_ENGINE_PARAMETER_SUFFIX)) - state->decodeTriggerEvent(s, time PASS_ENGINE_PARAMETER_SUFFIX); + if (isUsefulSignal(s PASS_ENGINE_PARAMETER_SUFFIX)) { + state->decodeTriggerEvent(triggerCycleCallback, + /* override */ nullptr, + s, time PASS_ENGINE_PARAMETER_SUFFIX); + } } - if (needEvent(stateIndex, size, multiWave, 2)) { - pin_state_t currentValue = multiWave->getChannelState(/*phaseIndex*/2, stateIndex); + if (needEvent(stateIndex, size, multiChannelStateSequence, 2)) { + pin_state_t currentValue = multiChannelStateSequence->getChannelState(/*phaseIndex*/2, stateIndex); trigger_event_e s = currentValue ? SHAFT_3RD_RISING : SHAFT_3RD_FALLING; - if (isUsefulSignal(s PASS_ENGINE_PARAMETER_SUFFIX)) - state->decodeTriggerEvent(s, time PASS_ENGINE_PARAMETER_SUFFIX); + if (isUsefulSignal(s PASS_ENGINE_PARAMETER_SUFFIX)) { + state->decodeTriggerEvent(triggerCycleCallback, + /* override */ nullptr, + s, time PASS_ENGINE_PARAMETER_SUFFIX); + } } } -void TriggerStimulatorHelper::assertSyncPositionAndSetDutyCycle(const uint32_t syncIndex, TriggerState *state, TriggerShape * shape +void TriggerStimulatorHelper::assertSyncPositionAndSetDutyCycle(const TriggerStateCallback triggerCycleCallback, + const uint32_t syncIndex, TriggerState *state, TriggerWaveform * shape DECLARE_ENGINE_PARAMETER_SUFFIX) { /** * let's feed two more cycles to validate shape definition */ for (uint32_t i = syncIndex + 1; i <= syncIndex + GAP_TRACKING_LENGTH * shape->getSize(); i++) { - feedSimulatedEvent(state, shape, i PASS_ENGINE_PARAMETER_SUFFIX); + feedSimulatedEvent(triggerCycleCallback, state, shape, i PASS_ENGINE_PARAMETER_SUFFIX); } int revolutionCounter = state->getTotalRevolutionCounter(); if (revolutionCounter != GAP_TRACKING_LENGTH + 1) { - warning(CUSTOM_OBD_TRIGGER_SHAPE, "sync failed/wrong gap parameters trigger=%s rc=%d", getTrigger_type_e(engineConfiguration->trigger.type), revolutionCounter); + warning(CUSTOM_OBD_TRIGGER_WAVEFORM, "sync failed/wrong gap parameters trigger=%s rc=%d", getTrigger_type_e(engineConfiguration->trigger.type), revolutionCounter); shape->setShapeDefinitionError(true); return; } @@ -109,10 +117,10 @@ void TriggerStimulatorHelper::assertSyncPositionAndSetDutyCycle(const uint32_t s /** * @return trigger synchronization point index, or error code if not found */ -uint32_t TriggerStimulatorHelper::findTriggerSyncPoint(TriggerShape * shape, +uint32_t TriggerStimulatorHelper::findTriggerSyncPoint(TriggerWaveform * shape, TriggerState *state DECLARE_ENGINE_PARAMETER_SUFFIX) { for (int i = 0; i < 4 * PWM_PHASE_MAX_COUNT; i++) { - feedSimulatedEvent(state, shape, i PASS_ENGINE_PARAMETER_SUFFIX); + feedSimulatedEvent(nullptr, state, shape, i PASS_ENGINE_PARAMETER_SUFFIX); if (state->shaft_is_synchronized) return i; diff --git a/firmware/controllers/trigger/trigger_simulator.h b/firmware/controllers/trigger/trigger_simulator.h index 5453e93c13..44fa8c0d01 100644 --- a/firmware/controllers/trigger/trigger_simulator.h +++ b/firmware/controllers/trigger/trigger_simulator.h @@ -3,29 +3,26 @@ * @brief This class knows how to produce synthetic shaft signals based on triggerShape * * @date Sep 23, 2015 - * @author Andrey Belomutskiy, (c) 2012-2017 + * @author Andrey Belomutskiy, (c) 2012-2019 */ -#ifndef CONTROLLERS_TRIGGER_TRIGGER_SIMULATOR_H_ -#define CONTROLLERS_TRIGGER_TRIGGER_SIMULATOR_H_ +#pragma once #include "trigger_decoder.h" class TriggerStimulatorHelper { public: - TriggerStimulatorHelper(); - uint32_t findTriggerSyncPoint(TriggerShape * shape, + uint32_t findTriggerSyncPoint(TriggerWaveform * shape, TriggerState *state DECLARE_ENGINE_PARAMETER_SUFFIX); - void assertSyncPositionAndSetDutyCycle(const uint32_t index, TriggerState *state, TriggerShape * shape + void assertSyncPositionAndSetDutyCycle(const TriggerStateCallback triggerCycleCallback, + const uint32_t index, TriggerState *state, TriggerWaveform * shape DECLARE_ENGINE_PARAMETER_SUFFIX); private: // send next event so that we can see how state reacts - void feedSimulatedEvent(TriggerState *state, TriggerShape * shape, int i DECLARE_ENGINE_PARAMETER_SUFFIX); + void feedSimulatedEvent(const TriggerStateCallback triggerCycleCallback, TriggerState *state, TriggerWaveform * shape, int i DECLARE_ENGINE_PARAMETER_SUFFIX); }; bool isUsefulSignal(trigger_event_e signal DECLARE_ENGINE_PARAMETER_SUFFIX); - -#endif /* CONTROLLERS_TRIGGER_TRIGGER_SIMULATOR_H_ */ diff --git a/firmware/development/development.mk b/firmware/development/development.mk index 7b4624017e..4ccc15e29a 100644 --- a/firmware/development/development.mk +++ b/firmware/development/development.mk @@ -9,7 +9,7 @@ DEV_SRC_CPP = $(DEVELOPMENT_DIR)/trigger_emulator.cpp \ $(DEVELOPMENT_DIR)/rfi_perftest.cpp \ $(DEVELOPMENT_DIR)/engine_emulator.cpp \ $(DEVELOPMENT_DIR)/engine_sniffer.cpp \ - $(DEVELOPMENT_DIR)/wave_analyzer.cpp \ + $(DEVELOPMENT_DIR)/logic_analyzer.cpp \ $(DEVELOPMENT_DIR)/development/perf_trace.cpp DEV_SIMULATOR_SRC_CPP = $(DEVELOPMENT_DIR)/engine_sniffer.cpp \ No newline at end of file diff --git a/firmware/development/engine_emulator.cpp b/firmware/development/engine_emulator.cpp index 17cb871f3e..bbd28ac21a 100644 --- a/firmware/development/engine_emulator.cpp +++ b/firmware/development/engine_emulator.cpp @@ -15,7 +15,7 @@ #include "fuel_math.h" #include "status_loop.h" -#include "wave_analyzer.h" +#include "logic_analyzer.h" #include "pin_repository.h" #include "pwm_generator_logic.h" diff --git a/firmware/development/engine_sniffer.cpp b/firmware/development/engine_sniffer.cpp index 66fa82edef..6be646565a 100644 --- a/firmware/development/engine_sniffer.cpp +++ b/firmware/development/engine_sniffer.cpp @@ -5,7 +5,7 @@ * Here we have our own build-in logic analyzer. The data we aggregate here is sent to the * java UI rusEfi Console so that it can be displayed nicely in the Sniffer tab. * - * Both external events (see wave_analyzer.c) and internal (see signal executors) are supported + * Both external events (see logic_analyzer.cpp) and internal (see signal executors) are supported * * @date Jun 23, 2013 * @author Andrey Belomutskiy, (c) 2012-2019 diff --git a/firmware/development/wave_analyzer.cpp b/firmware/development/logic_analyzer.cpp similarity index 98% rename from firmware/development/wave_analyzer.cpp rename to firmware/development/logic_analyzer.cpp index bb74ebdccb..b9e0317bcd 100644 --- a/firmware/development/wave_analyzer.cpp +++ b/firmware/development/logic_analyzer.cpp @@ -1,5 +1,5 @@ /** - * @file wave_analyzer.cpp + * @file logic_analyzer.cpp * @brief Initialization of Input Capture pins used for rusEfi console sniffer * * This file is responsible for sniffing of external digital signals and registering @@ -11,9 +11,10 @@ * @author Andrey Belomutskiy, (c) 2012-2019 */ +#include "logic_analyzer.h" + #include "global.h" #include "os_access.h" -#include "wave_analyzer.h" #include "eficonsole.h" #include "data_buffer.h" #include "pin_repository.h" @@ -26,7 +27,7 @@ #include "rpm_calculator.h" #include "engine_sniffer.h" -#if EFI_WAVE_ANALYZER +#if EFI_LOGIC_ANALYZER EXTERN_ENGINE; @@ -231,4 +232,4 @@ void initWaveAnalyzer(Logging *sharedLogger) { } -#endif /* EFI_WAVE_ANALYZER */ +#endif /* EFI_LOGIC_ANALYZER */ diff --git a/firmware/development/wave_analyzer.h b/firmware/development/logic_analyzer.h similarity index 82% rename from firmware/development/wave_analyzer.h rename to firmware/development/logic_analyzer.h index 115d6e902a..3be7f561af 100644 --- a/firmware/development/wave_analyzer.h +++ b/firmware/development/logic_analyzer.h @@ -1,18 +1,15 @@ /** - * @file wave_analyzer.h - * - * todo: rename all this 'logic analyzer' is probably much more appropriate + * @file logic_analyzer.h * * @date Jan 7, 2013 - * @author Andrey Belomutskiy, (c) 2012-2017 + * @author Andrey Belomutskiy, (c) 2012-2019 */ -#ifndef WAVE_ANALYZER_H_ -#define WAVE_ANALYZER_H_ +#pragma once #include "global.h" -#if EFI_WAVE_ANALYZER +#if EFI_LOGIC_ANALYZER #include "digital_input_icu.h" #include "engine_sniffer.h" @@ -57,7 +54,5 @@ void initWaveAnalyzer(Logging *sharedLogger); void printWave(Logging *logging); void showWaveInfo(void); -#endif - -#endif /* WAVE_ANALYZER_H_ */ +#endif /* EFI_LOGIC_ANALYZER */ diff --git a/firmware/development/perf_trace.cpp b/firmware/development/perf_trace.cpp index 3e1f328cda..66c570e590 100644 --- a/firmware/development/perf_trace.cpp +++ b/firmware/development/perf_trace.cpp @@ -1,3 +1,9 @@ +/** + * @file perf_trace.cpp + * + * See JsonOutput.java in rusEfi console + */ + #include "efifeatures.h" #include "perf_trace.h" @@ -26,30 +32,40 @@ struct TraceEntry uint32_t Timestamp; }; +// Ensure that the struct is the size we think it is - the binary layout is important static_assert(sizeof(TraceEntry) == 8); +// This buffer stores a trace - we write the full buffer once, then disable tracing static TraceEntry s_traceBuffer[TRACE_BUFFER_LENGTH]; static size_t s_nextIdx = 0; -static bool s_isTracing = true; +static bool s_isTracing = false; void perfEventImpl(PE event, EPhase phase, uint8_t data) { + // Bail if we aren't allowed to trace if constexpr (!ENABLE_PERF_TRACE) { return; } + // Bail if we aren't tracing if (!s_isTracing) { return; } - uint32_t timestamp = getTimeNowLowerNt(); + // todo: why doesn't getTimeNowLowerNt() work here? + // It returns 0 like we're in a unit test + uint32_t timestamp = port_rt_get_counter_value(); size_t idx; - // Critical section: reserve index under lock + // Critical section: disable interrupts to reserve an index. + // We could lock, but this gets called a LOT - so locks could + // significantly alter the results of the measurement. + // In addition, if we want to trace lock/unlock events, we can't + // be locking ourselves from the trace functionality. { - bool wasLocked = lockAnyContext(); + __disable_irq(); idx = s_nextIdx++; if (s_nextIdx >= TRACE_BUFFER_LENGTH) { @@ -57,9 +73,7 @@ void perfEventImpl(PE event, EPhase phase, uint8_t data) s_isTracing = false; } - if (!wasLocked) { - unlockAnyContext(); - } + __enable_irq(); } // We can safely write data out of the lock, our spot is reserved @@ -67,6 +81,7 @@ void perfEventImpl(PE event, EPhase phase, uint8_t data) entry.Event = event; entry.Phase = phase; + // Get the current active interrupt - this is the "thread ID" entry.ThreadId = static_cast(SCB->ICSR & SCB_ICSR_VECTACTIVE_Msk); entry.Timestamp = timestamp; entry.Data = data; diff --git a/firmware/development/perf_trace.h b/firmware/development/perf_trace.h index 9572fe2188..a45120480b 100644 --- a/firmware/development/perf_trace.h +++ b/firmware/development/perf_trace.h @@ -1,4 +1,7 @@ - +/** + * @file perf_trace.h + * + */ #pragma once #include @@ -7,8 +10,10 @@ // Defines different events we want to trace. These can be an interval (begin -> end), or an // instant. Instants can be global, or specific to one thread. You probably don't want to use // each element in PE more than once, as they should each indicate that a specific thing began, -// ended, or occured. +// ended, or occurred. enum class PE : uint8_t { + // The tag below is consumed by PerfTraceTool.java + // enum_start_tag INVALID, ISR, ContextSwitch, @@ -48,23 +53,14 @@ enum class PE : uint8_t { TunerStudioHandleCrcCommand, PwmConfigTogglePwmState, PwmConfigStateChangeCallback, + // enum_end_tag + // The tag above is consumed by PerfTraceTool.java + // please note that the tool requires a comma at the end of last value }; -void perfEventBegin(PE event, uint8_t data); -void perfEventEnd(PE event, uint8_t data); -void perfEventInstantGlobal(PE event, uint8_t data); - -inline void perfEventBegin(PE event) { - perfEventBegin(event, 0); -} - -inline void perfEventEnd(PE event) { - perfEventEnd(event, 0); -} - -inline void perfEventInstantGlobal(PE event) { - perfEventInstantGlobal(event, 0); -} +void perfEventBegin(PE event, uint8_t data = 0); +void perfEventEnd(PE event, uint8_t data = 0); +void perfEventInstantGlobal(PE event, uint8_t data = 0); // Enable one buffer's worth of perf tracing, and retrieve the buffer size in bytes void perfTraceEnable(); @@ -78,6 +74,7 @@ struct TraceBufferResult // Retrieve the trace buffer const TraceBufferResult perfTraceGetBuffer(); +#if ENABLE_PERF_TRACE class ScopePerf { public: @@ -85,19 +82,24 @@ public: ScopePerf(PE event, uint8_t data) : m_event(event), m_data(data) { -#if ENABLE_PERF_TRACE perfEventBegin(event, data); -#endif /* ENABLE_PERF_TRACE */ } ~ScopePerf() { -#if ENABLE_PERF_TRACE perfEventEnd(m_event, m_data); -#endif /* ENABLE_PERF_TRACE */ } private: const PE m_event; const uint8_t m_data; }; + +#else /* if ENABLE_PERF_TRACE */ + +struct ScopePerf { + ScopePerf(PE event) { (void)event; } + ScopePerf(PE event, uint8_t data) { (void)event; (void)data; } +}; + +#endif /* ENABLE_PERF_TRACE */ diff --git a/firmware/development/rfi_perftest.cpp b/firmware/development/rfi_perftest.cpp index 4cdcadcc98..5cdfe07dcd 100644 --- a/firmware/development/rfi_perftest.cpp +++ b/firmware/development/rfi_perftest.cpp @@ -284,7 +284,7 @@ static void runChibioTest(void) { print("EFI_INTERNAL_ADC=%d\r\n", EFI_INTERNAL_ADC); print("EFI_HD44780_LCD=%d\r\n", EFI_HD44780_LCD); print("EFI_MAP_AVERAGING=%d\r\n", EFI_MAP_AVERAGING); - print("EFI_WAVE_ANALYZER=%d\r\n", EFI_WAVE_ANALYZER); + print("EFI_LOGIC_ANALYZER=%d\r\n", EFI_LOGIC_ANALYZER); print("EFI_ENGINE_SNIFFER=%d\r\n", EFI_ENGINE_SNIFFER); print("EFI_SENSOR_CHART=%d\r\n", EFI_SENSOR_CHART); print("EFI_SHAFT_POSITION_INPUT=%d\r\n", EFI_SHAFT_POSITION_INPUT); diff --git a/firmware/development/sensor_chart.h b/firmware/development/sensor_chart.h index 79237ab2c0..91a02390ef 100644 --- a/firmware/development/sensor_chart.h +++ b/firmware/development/sensor_chart.h @@ -2,15 +2,12 @@ * @file sensor_chart.h * * @date Dec 20, 2013 - * @author Andrey Belomutskiy, (c) 2012-2017 + * @author Andrey Belomutskiy, (c) 2012-2019 */ -#ifndef SENSOR_CHART_H_ -#define SENSOR_CHART_H_ +#pragma once #include "global.h" void scAddData(float angle, float value); void initSensorChart(void); - -#endif /* SENSOR_CHART_H_ */ diff --git a/firmware/gen_firing_order.bat b/firmware/gen_firing_order.bat new file mode 100644 index 0000000000..3bbf59ed92 --- /dev/null +++ b/firmware/gen_firing_order.bat @@ -0,0 +1 @@ +java -jar ../java_console_binary/rusefi_console.jar firing_order controllers/algo/firing_order.h diff --git a/firmware/gen_ptrace_enums.bat b/firmware/gen_ptrace_enums.bat new file mode 100644 index 0000000000..f8c1eead0c --- /dev/null +++ b/firmware/gen_ptrace_enums.bat @@ -0,0 +1,5 @@ +# +# this tool might have enough flexibility to generate both C# and java class depending on specified "top line" and "stringClassName" parameters? +# +java -jar ../java_console_binary/rusefi_console.jar ptrace_enums development/perf_trace.h ../java_console/models/src/com/rusefi/tracing/EnumNames.java "package com.rusefi.tracing;" "public static final String" + diff --git a/firmware/hw_layer/adc_inputs.cpp b/firmware/hw_layer/adc_inputs.cpp index d8e50c490c..70ba7f5104 100644 --- a/firmware/hw_layer/adc_inputs.cpp +++ b/firmware/hw_layer/adc_inputs.cpp @@ -468,7 +468,7 @@ static void adc_callback_slow(ADCDriver *adcp, adcsample_t *buffer, size_t n) { if (adcp->state == ADC_COMPLETE) { slowAdc.invalidateSamplesCache(); - efiAssertVoid(CUSTOM_ERR_6671, getCurrentRemainingStack() > 128, "lowstck#9c"); + efiAssertVoid(CUSTOM_STACK_ADC_6671, getCurrentRemainingStack() > 128, "lowstck#9c"); /* Calculates the average values from the ADC samples.*/ for (int i = 0; i < slowAdc.size(); i++) { @@ -491,6 +491,11 @@ void addChannel(const char *name, adc_channel_e setting, adc_channel_mode_e mode if (setting == EFI_ADC_NONE) { return; } + if (/*type-limited (int)setting < 0 || */(int)setting>=HW_MAX_ADC_INDEX) { + firmwareError(CUSTOM_INVALID_ADC, "Invalid ADC setting %s", name); + return; + } + if (adcHwChannelEnabled[setting] != ADC_OFF) { getPinNameByAdcChannel(name, setting, errorMsgBuff); firmwareError(CUSTOM_ERR_ADC_USED, "ADC mapping error: input %s for %s already used by %s?", errorMsgBuff, name, adcHwChannelUsage[setting]); @@ -512,6 +517,12 @@ static void configureInputs(void) { memset(adcHwChannelEnabled, 0, sizeof(adcHwChannelEnabled)); memset(adcHwChannelUsage, 0, sizeof(adcHwChannelUsage)); + /** + * order of analog channels here is totally random and has no meaning + * we also have some weird implementation with internal indices - that all has no meaning, it's just a random implementation + * which does not mean anything. + */ + addChannel("MAP", engineConfiguration->map.sensor.hwChannel, ADC_FAST); if (hasMafSensor()) { addChannel("MAF", engineConfiguration->mafAdcChannel, ADC_FAST); @@ -520,14 +531,22 @@ static void configureInputs(void) { addChannel("baro", engineConfiguration->baroSensor.hwChannel, ADC_SLOW); addChannel("TPS", engineConfiguration->tps1_1AdcChannel, ADC_SLOW); + if (engineConfiguration->tps2_1AdcChannel != EFI_ADC_0) { + // allow EFI_ADC_0 next time we have an incompatible configuration change + addChannel("TPS2", engineConfiguration->tps2_1AdcChannel, ADC_SLOW); + } addChannel("fuel", engineConfiguration->fuelLevelSensor, ADC_SLOW); addChannel("pPS", engineConfiguration->throttlePedalPositionAdcChannel, ADC_SLOW); addChannel("VBatt", engineConfiguration->vbattAdcChannel, ADC_SLOW); // not currently used addChannel("Vref", engineConfiguration->vRefAdcChannel, ADC_SLOW); addChannel("CLT", engineConfiguration->clt.adcChannel, ADC_SLOW); addChannel("IAT", engineConfiguration->iat.adcChannel, ADC_SLOW); - addChannel("AUX#1", engineConfiguration->auxTempSensor1.adcChannel, ADC_SLOW); - addChannel("AUX#2", engineConfiguration->auxTempSensor2.adcChannel, ADC_SLOW); + addChannel("AUXT#1", engineConfiguration->auxTempSensor1.adcChannel, ADC_SLOW); + addChannel("AUXT#2", engineConfiguration->auxTempSensor2.adcChannel, ADC_SLOW); + if (engineConfiguration->bc.auxFastSensor1_adcChannel != EFI_ADC_0) { + // allow EFI_ADC_0 next time we have an incompatible configuration change + addChannel("AUXF#1", engineConfiguration->bc.auxFastSensor1_adcChannel, ADC_FAST); + } addChannel("AFR", engineConfiguration->afr.hwChannel, ADC_SLOW); addChannel("OilP", engineConfiguration->oilPressure.hwChannel, ADC_SLOW); addChannel("AC", engineConfiguration->acSwitchAdc, ADC_SLOW); diff --git a/firmware/hw_layer/digital_input_icu.cpp b/firmware/hw_layer/digital_input_icu.cpp index 81b8b33bdb..028c8929ba 100644 --- a/firmware/hw_layer/digital_input_icu.cpp +++ b/firmware/hw_layer/digital_input_icu.cpp @@ -28,7 +28,7 @@ #include "fl_stack.h" -#if EFI_ICU_INPUTS +#if EFI_ICU_INPUTS && HAL_USE_ICU #include "mpu_util.h" #include "eficonsole.h" @@ -281,8 +281,8 @@ void startInputDriver(const char *msg, /*nullable*/digital_input_s *hw, bool isA } wave_icucfg.channel = getInputCaptureChannel(hw->brainPin); efiIcuStart(msg, driver, &wave_icucfg); - efiAssertVoid(CUSTOM_ERR_6672, driver != NULL, "di: driver is NULL"); - efiAssertVoid(CUSTOM_ERR_6673, driver->state == ICU_READY, "di: driver not ready"); + efiAssertVoid(CUSTOM_ICU_DRIVER, driver != NULL, "di: driver is NULL"); + efiAssertVoid(CUSTOM_ICU_DRIVER_STATE, driver->state == ICU_READY, "di: driver not ready"); icuStartCapture(driver); // this would change state from READY to WAITING icuEnableNotifications(driver); } diff --git a/firmware/hw_layer/hardware.cpp b/firmware/hw_layer/hardware.cpp index f9e3828930..c58a37d134 100644 --- a/firmware/hw_layer/hardware.cpp +++ b/firmware/hw_layer/hardware.cpp @@ -27,6 +27,7 @@ #include "accelerometer.h" #include "eficonsole.h" #include "console_io.h" +#include "sensor_chart.h" #include "mpu_util.h" //#include "usb_msd.h" @@ -93,7 +94,7 @@ bool rtcWorks = true; */ void lockSpi(spi_device_e device) { UNUSED(device); - efiAssertVoid(CUSTOM_ERR_6674, getCurrentRemainingStack() > 128, "lockSpi"); + efiAssertVoid(CUSTOM_STACK_SPI, getCurrentRemainingStack() > 128, "lockSpi"); // todo: different locks for different SPI devices! chMtxLock(&spiMtx); } @@ -188,8 +189,6 @@ static int fastMapSampleIndex; static int hipSampleIndex; static int tpsSampleIndex; -extern int tpsFastAdc; - #if HAL_USE_ADC extern AdcDevice fastAdc; @@ -216,6 +215,13 @@ void adc_callback_fast(ADCDriver *adcp, adcsample_t *buffer, size_t n) { */ efiAssertVoid(CUSTOM_ERR_6676, getCurrentRemainingStack() > 128, "lowstck#9b"); +#if EFI_SENSOR_CHART + if (ENGINE(sensorChartMode) == SC_AUX_FAST1) { + float voltage = getAdcValue("fAux1", engineConfiguration->bc.auxFastSensor1_adcChannel); + scAddData(getCrankshaftAngleNt(getTimeNowNt() PASS_ENGINE_PARAMETER_SUFFIX), voltage); + } +#endif /* EFI_SENSOR_CHART */ + #if EFI_MAP_AVERAGING mapAveragingAdcCallback(fastAdc.samples[fastMapSampleIndex]); #endif /* EFI_MAP_AVERAGING */ @@ -223,7 +229,7 @@ void adc_callback_fast(ADCDriver *adcp, adcsample_t *buffer, size_t n) { if (CONFIGB(isHip9011Enabled)) { hipAdcCallback(fastAdc.samples[hipSampleIndex]); } -#endif +#endif /* EFI_HIP_9011 */ // if (tpsSampleIndex != TPS_IS_SLOW) { // tpsFastAdc = fastAdc.samples[tpsSampleIndex]; // } @@ -242,6 +248,7 @@ static void calcFastAdcIndexes(void) { } else { tpsSampleIndex = TPS_IS_SLOW; } + #endif/* HAL_USE_ADC */ } @@ -257,12 +264,6 @@ void turnOnHardware(Logging *sharedLogger) { #endif /* EFI_SHAFT_POSITION_INPUT */ } -static void unregisterPin(brain_pin_e currentPin, brain_pin_e prevPin) { - if (currentPin != prevPin) { - brain_pin_markUnused(prevPin); - } -} - void stopSpi(spi_device_e device) { #if HAL_USE_SPI if (!isSpiInitialized[device]) @@ -339,7 +340,8 @@ void applyNewHardwareSettings(void) { stopHD44780_pins(); #endif /* #if EFI_HD44780_LCD */ - unregisterPin(engineConfiguration->bc.clutchUpPin, activeConfiguration.bc.clutchUpPin); + if (isPinOrModeChanged(clutchUpPin, clutchUpPinMode)) + brain_pin_markUnused(activeConfiguration.clutchUpPin); enginePins.unregisterPins(); @@ -424,7 +426,7 @@ void initHardware(Logging *l) { /** * We need the LED_ERROR pin even before we read configuration */ - initPrimaryPins(); + initPrimaryPins(sharedLogger); if (hasFirmwareError()) { return; diff --git a/firmware/hw_layer/hip9011.cpp b/firmware/hw_layer/hip9011.cpp index bbedf7ad85..f0dde59bde 100644 --- a/firmware/hw_layer/hip9011.cpp +++ b/firmware/hw_layer/hip9011.cpp @@ -254,14 +254,14 @@ static void intHoldCallback(trigger_event_e ckpEventType, uint32_t index DECLARE int structIndex = getRevolutionCounter() % 2; // todo: schedule this based on closest trigger event, same as ignition works - scheduleByAngle(rpm, &startTimer[structIndex], engineConfiguration->knockDetectionWindowStart, - (schfunc_t) &startIntegration, NULL PASS_ENGINE_PARAMETER_SUFFIX); + scheduleByAngle(&startTimer[structIndex], engineConfiguration->knockDetectionWindowStart, + (schfunc_t) &startIntegration, NULL); #if EFI_PROD_CODE hipLastExecutionCount = lastExecutionCount; #endif /* EFI_PROD_CODE */ - scheduleByAngle(rpm, &endTimer[structIndex], engineConfiguration->knockDetectionWindowEnd, + scheduleByAngle(&endTimer[structIndex], engineConfiguration->knockDetectionWindowEnd, (schfunc_t) &endIntegration, - NULL PASS_ENGINE_PARAMETER_SUFFIX); + NULL); engine->m.hipCbTime = getTimeNowLowerNt() - engine->m.beforeHipCb; } diff --git a/firmware/hw_layer/hip9011_logic.cpp b/firmware/hw_layer/hip9011_logic.cpp index c210c84a9b..68c315c06a 100644 --- a/firmware/hw_layer/hip9011_logic.cpp +++ b/firmware/hw_layer/hip9011_logic.cpp @@ -68,7 +68,7 @@ void HIP9011::setAngleWindowWidth(DEFINE_HIP_PARAMS) { float angleWindowWidth = GET_CONFIG_VALUE(knockDetectionWindowEnd) - GET_CONFIG_VALUE(knockDetectionWindowStart); if (angleWindowWidth < 0) { #if EFI_PROD_CODE - warning(CUSTOM_ERR_6697, "invalid knock window"); + warning(CUSTOM_KNOCK_WINDOW, "invalid knock window"); #endif angleWindowWidth = 0; } diff --git a/firmware/hw_layer/pin_repository.cpp b/firmware/hw_layer/pin_repository.cpp index 473047b9fa..7d18ff32f9 100644 --- a/firmware/hw_layer/pin_repository.cpp +++ b/firmware/hw_layer/pin_repository.cpp @@ -21,7 +21,7 @@ #define BOARD_EXT_PINREPOPINS 0 #endif -static int initialized = FALSE; +static bool initialized = false; static LoggingWithStorage logger("pin repos"); static int totalPinsUsed = 0; @@ -139,7 +139,7 @@ void initPinRepository(void) { initialized = true; - addConsoleAction("pins", reportPins); + addConsoleAction(CMD_PINS, reportPins); } bool brain_pin_is_onchip(brain_pin_e brainPin) @@ -197,8 +197,7 @@ bool brain_pin_markUsed(brain_pin_e brainPin, const char *msg) { * See also brain_pin_markUsed() */ -void brain_pin_markUnused(brain_pin_e brainPin) -{ +void brain_pin_markUnused(brain_pin_e brainPin) { int index; if (!initialized) { diff --git a/firmware/hw_layer/ports/kinetis/hw_ports.mk b/firmware/hw_layer/ports/kinetis/hw_ports.mk index 29245349f7..7438697eef 100644 --- a/firmware/hw_layer/ports/kinetis/hw_ports.mk +++ b/firmware/hw_layer/ports/kinetis/hw_ports.mk @@ -8,4 +8,5 @@ HW_LAYER_EMS += $(PROJECT_DIR)/hw_layer/ports/kinetis/flash.c \ HW_LAYER_EMS_CPP += $(PROJECT_DIR)/hw_layer/ports/kinetis/mpu_util.cpp \ $(PROJECT_DIR)/hw_layer/ports/kinetis/kinetis_pins.cpp \ - $(PROJECT_DIR)/hw_layer/ports/kinetis/kinetis_common.cpp + $(PROJECT_DIR)/hw_layer/ports/kinetis/kinetis_common.cpp \ + $(PROJECT_DIR)/hw_layer/trigger_input_comp.cpp diff --git a/firmware/hw_layer/ports/kinetis/mpu_util.cpp b/firmware/hw_layer/ports/kinetis/mpu_util.cpp index 78e351df9b..78475108f3 100644 --- a/firmware/hw_layer/ports/kinetis/mpu_util.cpp +++ b/firmware/hw_layer/ports/kinetis/mpu_util.cpp @@ -12,7 +12,6 @@ #include "mpu_util.h" #include "flash.h" -#include "error_handling.h" #include "engine.h" #include "pin_repository.h" #include "os_util.h" diff --git a/firmware/hw_layer/ports/stm32/stm32f4/mpu_util.cpp b/firmware/hw_layer/ports/stm32/stm32f4/mpu_util.cpp index 8249294693..3585257993 100644 --- a/firmware/hw_layer/ports/stm32/stm32f4/mpu_util.cpp +++ b/firmware/hw_layer/ports/stm32/stm32f4/mpu_util.cpp @@ -11,7 +11,6 @@ #include "mpu_util.h" #include "flash.h" -#include "error_handling.h" #include "engine.h" #include "pin_repository.h" #include "stm32f4xx_hal_flash.h" diff --git a/firmware/hw_layer/ports/stm32/stm32f7/mpu_util.cpp b/firmware/hw_layer/ports/stm32/stm32f7/mpu_util.cpp index e2e11c76a3..bce4e43da2 100644 --- a/firmware/hw_layer/ports/stm32/stm32f7/mpu_util.cpp +++ b/firmware/hw_layer/ports/stm32/stm32f7/mpu_util.cpp @@ -8,7 +8,6 @@ #include "global.h" #include "mpu_util.h" #include "flash.h" -#include "error_handling.h" #include "engine.h" #include "pin_repository.h" #include "stm32f7xx_hal_flash.h" diff --git a/firmware/hw_layer/sensors/cj125.cpp b/firmware/hw_layer/sensors/cj125.cpp index 53290706ad..d24f6c08d4 100644 --- a/firmware/hw_layer/sensors/cj125.cpp +++ b/firmware/hw_layer/sensors/cj125.cpp @@ -164,7 +164,7 @@ static void cjPrintErrorCode(cj125_error_e errCode) { case CJ125_ERROR_OVERHEAT: errString = "Sensor overheating"; break; - case CJ125_ERROR_NONE: + case CJ125_NO_ERROR: errString = "N/A"; break; case CJ125_ERROR_WRONG_IDENT: @@ -173,6 +173,9 @@ static void cjPrintErrorCode(cj125_error_e errCode) { case CJ125_ERROR_WRONG_INIT: errString = "W_INIT"; break; + case CJ125_ERROR_DISABLED: + errString = "DISABLED"; + break; } scheduleMsg(logger, "cj125 ERROR: %s.", errString); } @@ -540,18 +543,22 @@ void initCJ125(Logging *sharedLogger DECLARE_ENGINE_PARAMETER_SUFFIX) { globalInstance.spi = &spi; globalInstance.logger = sharedLogger; - if (!CONFIGB(isCJ125Enabled)) + if (!CONFIGB(isCJ125Enabled)) { + globalInstance.errorCode = CJ125_ERROR_DISABLED; return; + } if (CONFIG(cj125ur) == EFI_ADC_NONE || CONFIG(cj125ua) == EFI_ADC_NONE) { scheduleMsg(logger, "cj125 init error! cj125ur and cj125ua are required."); warning(CUSTOM_CJ125_0, "cj ur ua"); + globalInstance.errorCode = CJ125_ERROR_DISABLED; return; } if (CONFIGB(wboHeaterPin) == GPIO_UNASSIGNED) { scheduleMsg(logger, "cj125 init error! wboHeaterPin is required."); warning(CUSTOM_CJ125_1, "cj heater"); + globalInstance.errorCode = CJ125_ERROR_DISABLED; return; } diff --git a/firmware/hw_layer/sensors/cj125_logic.cpp b/firmware/hw_layer/sensors/cj125_logic.cpp index 22ee2198d4..e8b017da1e 100644 --- a/firmware/hw_layer/sensors/cj125_logic.cpp +++ b/firmware/hw_layer/sensors/cj125_logic.cpp @@ -7,6 +7,7 @@ #include "cj125_logic.h" #include "engine.h" +#include "error_handling.h" EXTERN_ENGINE; @@ -47,7 +48,12 @@ void CJ125::StartHeaterControl(pwm_gen_callback *stateChangeCallback DECLARE_ENG SetIdleHeater(PASS_ENGINE_PARAMETER_SIGNATURE); } -void CJ125::cjIdentify(void) { +/** + * @return true in case of positive SPI identification + * false in case of unexpected SPI response + */ +bool CJ125::cjIdentify(void) { + efiAssert(OBD_PCM_Processor_Fault, spi!= NULL, "No SPI pointer", false); // read Ident register int ident = spi->ReadRegister(IDENT_REG_RD) & CJ125_IDENT_MASK; @@ -62,15 +68,22 @@ void CJ125::cjIdentify(void) { scheduleMsg(logger, "cj125: Check ident=0x%x diag=0x%x init1=0x%x init2=0x%x", ident, diag, init1, init2); if (ident != CJ125_IDENT) { scheduleMsg(logger, "cj125: Error! Wrong ident! Cannot communicate with CJ125!"); + errorCode = CJ125_ERROR_WRONG_IDENT; + state = CJ125_ERROR; + return false; } if (init1 != CJ125_INIT1_NORMAL_17 || init2 != CJ125_INIT2_DIAG) { scheduleMsg(logger, "cj125: Error! Cannot set init registers! Cannot communicate with CJ125!"); + errorCode = CJ125_ERROR_WRONG_INIT; + state = CJ125_ERROR; + return false; } #if 0 if (diag != CJ125_DIAG_NORM) { scheduleMsg(logger, "cj125: Diag error!"); } #endif + return true; } void CJ125::cjSetMode(cj125_mode_e m) { diff --git a/firmware/hw_layer/sensors/cj125_logic.h b/firmware/hw_layer/sensors/cj125_logic.h index 208aeda0a2..e2b326fff2 100644 --- a/firmware/hw_layer/sensors/cj125_logic.h +++ b/firmware/hw_layer/sensors/cj125_logic.h @@ -31,11 +31,12 @@ typedef enum { } cj125_state_e; typedef enum { - CJ125_ERROR_NONE = 0, + CJ125_NO_ERROR = 0, CJ125_ERROR_HEATER_MALFUNCTION = 1, CJ125_ERROR_OVERHEAT = 2, CJ125_ERROR_WRONG_IDENT = 3, CJ125_ERROR_WRONG_INIT = 4, + CJ125_ERROR_DISABLED = 5, } cj125_error_e; typedef enum { @@ -90,14 +91,14 @@ public: // Used by CJ125 driver state machine volatile cj125_state_e state = CJ125_INIT; // Last Error code - volatile cj125_error_e errorCode = CJ125_ERROR_NONE; + volatile cj125_error_e errorCode = CJ125_NO_ERROR; void setError(cj125_error_e errCode DECLARE_ENGINE_PARAMETER_SUFFIX); bool isWorkingState(void) const; void SetHeater(float value DECLARE_ENGINE_PARAMETER_SUFFIX); void SetIdleHeater(DECLARE_ENGINE_PARAMETER_SIGNATURE); void StartHeaterControl(pwm_gen_callback *stateChangeCallback DECLARE_ENGINE_PARAMETER_SUFFIX); - void cjIdentify(void); + bool cjIdentify(void); void cjSetMode(cj125_mode_e m); bool isValidState() const; void cjInitPid(DECLARE_ENGINE_PARAMETER_SIGNATURE); diff --git a/firmware/hw_layer/sensors/joystick.h b/firmware/hw_layer/sensors/joystick.h index 3360c969f4..cb88f46ac9 100644 --- a/firmware/hw_layer/sensors/joystick.h +++ b/firmware/hw_layer/sensors/joystick.h @@ -2,10 +2,10 @@ * @file joystick.h * * @date Jan 2, 2015 - * @author Andrey Belomutskiy, (c) 2012-2017 + * @author Andrey Belomutskiy, (c) 2012-2019 */ -#ifndef CONTROLLERS_JOYSTICK_H_ -#define CONTROLLERS_JOYSTICK_H_ + +#pragma once #include "global.h" @@ -21,5 +21,3 @@ void onJoystick(joystick_button_e button); void initJoystick(Logging *shared); void startJoystickPins(); void stopJoystickPins(); - -#endif /* CONTROLLERS_JOYSTICK_H_ */ diff --git a/firmware/hw_layer/sensors/yaw_rate_sensor.h b/firmware/hw_layer/sensors/yaw_rate_sensor.h index 09355b0019..58aee052b1 100644 --- a/firmware/hw_layer/sensors/yaw_rate_sensor.h +++ b/firmware/hw_layer/sensors/yaw_rate_sensor.h @@ -1,16 +1,12 @@ /* - * yaw_rate_sensor.h + * @file yaw_rate_sensor.h * - * Created on: Oct 16, 2018 - * @author Andrey Belomutskiy, (c) 2012-2018 + * @date Oct 16, 2018 + * @author Andrey Belomutskiy, (c) 2012-2019 */ -#ifndef HW_LAYER_SENSORS_YAW_RATE_SENSOR_H_ -#define HW_LAYER_SENSORS_YAW_RATE_SENSOR_H_ +#pragma once #include "global.h" -#include "engine.h" void initBoschYawRateSensor(); - -#endif /* HW_LAYER_SENSORS_YAW_RATE_SENSOR_H_ */ diff --git a/firmware/hw_layer/stepper.cpp b/firmware/hw_layer/stepper.cpp index cceb0daa9c..663804a243 100644 --- a/firmware/hw_layer/stepper.cpp +++ b/firmware/hw_layer/stepper.cpp @@ -112,13 +112,6 @@ StepperMotor::StepperMotor() { currentPosition = 0; targetPosition = 0; -#if EFI_PROD_CODE - enablePort = NULL; - enablePin = 0; - stepPort = NULL; - stepPin = 0; -#endif - reactionTime = 0; totalSteps = 0; } @@ -142,22 +135,20 @@ void StepperMotor::setDirection(bool isIncrementing) { } void StepperMotor::pulse() { -#if EFI_PROD_CODE - palWritePad(enablePort, enablePin, 0); // enable stepper - palWritePad(stepPort, stepPin, 1); + enablePin.setValue(false); // enable stepper + + stepPin.setValue(true); chThdSleepMilliseconds(reactionTime); - palWritePad(stepPort, stepPin, 0); + stepPin.setValue(false); chThdSleepMilliseconds(reactionTime); - palWritePad(enablePort, enablePin, 1); // disable stepper -#endif /* EFI_PROD_CODE */ + enablePin.setValue(true); // disable stepper } void StepperMotor::initialize(brain_pin_e stepPin, brain_pin_e directionPin, pin_output_mode_e directionPinMode, float reactionTime, int totalSteps, brain_pin_e enablePin, pin_output_mode_e enablePinMode, Logging *sharedLogger) { - UNUSED(enablePinMode); this->reactionTime = maxF(1, reactionTime); this->totalSteps = maxI(3, totalSteps); @@ -167,30 +158,18 @@ void StepperMotor::initialize(brain_pin_e stepPin, brain_pin_e directionPin, pin return; } -#if EFI_PROD_CODE - stepPort = getHwPort("step", stepPin); - this->stepPin = getHwPin("step", stepPin); -#endif /* EFI_PROD_CODE */ - this->directionPinMode = directionPinMode; this->directionPin.initPin("stepper dir", directionPin, &this->directionPinMode); -#if EFI_PROD_CODE - enablePort = getHwPort("enable", enablePin); - this->enablePin = getHwPin("enable", enablePin); -#endif /* EFI_PROD_CODE */ + this->stepPinMode = OM_DEFAULT; // todo: do we need configurable stepPinMode? + this->stepPin.initPin("stepper step", stepPin, &this->stepPinMode); - efiSetPadMode("stepper step", stepPin, PAL_MODE_OUTPUT_PUSHPULL); - // todo: start using enablePinMode parameter here #718 - efiSetPadMode("stepper enable", enablePin, PAL_MODE_OUTPUT_PUSHPULL); - -#if EFI_PROD_CODE - palWritePad(this->enablePort, enablePin, 1); // disable stepper + this->enablePinMode = enablePinMode; + this->enablePin.initPin("stepper enable", enablePin, &this->enablePinMode); // All pins must be 0 for correct hardware startup (e.g. stepper auto-disabling circuit etc.). - palWritePad(this->stepPort, this->stepPin, 0); -#endif - + this->enablePin.setValue(true); // disable stepper + this->stepPin.setValue(false); this->directionPin.setValue(false); this->currentDirection = false; diff --git a/firmware/hw_layer/stepper.h b/firmware/hw_layer/stepper.h index 168e2cebf1..c951add875 100644 --- a/firmware/hw_layer/stepper.h +++ b/firmware/hw_layer/stepper.h @@ -21,7 +21,7 @@ public: int getTargetPosition() const; void setDirection(bool isIncrementing); - OutputPin directionPin; + OutputPin directionPin, stepPin, enablePin; int currentPosition; bool currentDirection; float reactionTime; @@ -29,15 +29,7 @@ public: private: int targetPosition; -#if EFI_PROD_CODE - ioportid_t stepPort; - ioportmask_t stepPin; - - ioportid_t enablePort; - ioportmask_t enablePin; -#endif - - pin_output_mode_e directionPinMode; + pin_output_mode_e directionPinMode, stepPinMode, enablePinMode; THD_WORKING_AREA(stThreadStack, UTILITY_THREAD_STACK_SIZE); }; diff --git a/firmware/hw_layer/trigger_input_comp.cpp b/firmware/hw_layer/trigger_input_comp.cpp index 307485ce5e..c854db0f4f 100644 --- a/firmware/hw_layer/trigger_input_comp.cpp +++ b/firmware/hw_layer/trigger_input_comp.cpp @@ -23,25 +23,59 @@ EXTERN_ENGINE ; static Logging *logger; +static volatile int centeredDacValue = 127; +static volatile int toothCnt = 0; +static volatile int dacHysteresisMin = 1; // = 5V * 1/256 (8-bit DAC) = ~20mV +static volatile int dacHysteresisMax = 15; // = ~300mV +static volatile int dacHysteresisDelta = dacHysteresisMin; +static volatile int hystUpdatePeriodNumEvents = 116; // every ~1 turn of 60-2 wheel +static volatile efitick_t prevNt = 0; +// VR-sensor saturation stuff +static volatile float curVrFreqNt = 0, saturatedVrFreqNt = 0; + +// We want to interpolate between min and max depending on the signal level (adaptive hysteresis). +// But we don't want to measure the signal amplitude directly, so we estimate it by measuring the signal frequency: +// for VR sensors, the amplitude is inversely proportional to the tooth's 'time-width'. +// We find it by dividing the total time by the teeth count, and use the reciprocal value as signal frequency! +static void setHysteresis(COMPDriver *comp, int sign) { + // update the hysteresis threshold, but not for every tooth +#ifdef EFI_TRIGGER_COMP_ADAPTIVE_HYSTERESIS + if (toothCnt++ > hystUpdatePeriodNumEvents) { + efitick_t nowNt = getTimeNowNt(); + curVrFreqNt = (float)toothCnt / (float)(nowNt - prevNt); + dacHysteresisDelta = (int)efiRound(interpolateClamped(0.0f, dacHysteresisMin, saturatedVrFreqNt, dacHysteresisMax, curVrFreqNt), 1.0f); + toothCnt = 0; + prevNt = nowNt; +#ifdef TRIGGER_COMP_EXTREME_LOGGING + scheduleMsg(logger, "* f=%f d=%d", curVrFreqNt * 1000.0f, dacHysteresisDelta); +#endif /* TRIGGER_COMP_EXTREME_LOGGING */ + } +#endif /* EFI_TRIGGER_COMP_ADAPTIVE_HYSTERESIS */ + comp_lld_set_dac_value(comp, centeredDacValue + dacHysteresisDelta * sign); +} + static void comp_shaft_callback(COMPDriver *comp) { - bool isRising = (comp_lld_get_status(comp) & COMP_IRQ_RISING) != 0; + uint32_t status = comp_lld_get_status(comp); int isPrimary = (comp == EFI_COMP_PRIMARY_DEVICE); - if (!isPrimary && !TRIGGER_SHAPE(needSecondTriggerInput)) { + if (!isPrimary && !TRIGGER_WAVEFORM(needSecondTriggerInput)) { return; } trigger_event_e signal; - if (isRising) { + if (status & COMP_IRQ_RISING) { signal = isPrimary ? (engineConfiguration->invertPrimaryTriggerSignal ? SHAFT_PRIMARY_FALLING : SHAFT_PRIMARY_RISING) : (engineConfiguration->invertSecondaryTriggerSignal ? SHAFT_SECONDARY_FALLING : SHAFT_SECONDARY_RISING); - } else { + hwHandleShaftSignal(signal); + // shift the threshold down a little bit to avoid false-triggering (threshold hysteresis) + setHysteresis(comp, -1); + } + + if (status & COMP_IRQ_FALLING) { signal = isPrimary ? (engineConfiguration->invertPrimaryTriggerSignal ? SHAFT_PRIMARY_RISING : SHAFT_PRIMARY_FALLING) : (engineConfiguration->invertSecondaryTriggerSignal ? SHAFT_SECONDARY_RISING : SHAFT_SECONDARY_FALLING); + hwHandleShaftSignal(signal); + // shift the threshold up a little bit to avoid false-triggering (threshold hysteresis) + setHysteresis(comp, 1); } - hwHandleShaftSignal(signal); - -#ifdef EFI_TRIGGER_DEBUG_BLINK - __blink(1); -#endif } // todo: add cam support? @@ -71,17 +105,36 @@ void turnOnTriggerInputPins(Logging *sharedLogger) { applyNewTriggerInputPins(); } +static int getDacValue(uint8_t voltage DECLARE_ENGINE_PARAMETER_SUFFIX) { + constexpr float maxDacValue = 255.0f; // 8-bit DAC + return (int)efiRound(maxDacValue * (float)voltage * VOLTAGE_1_BYTE_PACKING_DIV / CONFIG(adcVcc), 1.0f); +} + void startTriggerInputPins(void) { //efiAssertVoid(CUSTOM_ERR_, !isCompEnabled, "isCompEnabled"); + if (isCompEnabled) { + scheduleMsg(logger, "startTIPins(): already enabled!"); + return; + } - const float vRef = 5.0f; - const float vSensorRef = 2.5f; // 2.5V resistor divider - // when VR sensor is silent, there's still some noise around vRef, so we need a small threshold to avoid false triggering - const float noSignalThreshold = 0.05f; + centeredDacValue = getDacValue(CONFIG(triggerCompCenterVolt) PASS_ENGINE_PARAMETER_SUFFIX); // usually 2.5V resistor divider - const int maxDacValue = 255; - const int vDac = (int)(int)efiRound(maxDacValue * (vSensorRef - noSignalThreshold) / vRef, 1.0f); + dacHysteresisMin = getDacValue(CONFIG(triggerCompHystMin) PASS_ENGINE_PARAMETER_SUFFIX); // usually ~20mV + dacHysteresisMax = getDacValue(CONFIG(triggerCompHystMax) PASS_ENGINE_PARAMETER_SUFFIX); // usually ~300mV + dacHysteresisDelta = dacHysteresisMin; + // 20 rpm (60_2) = 1000*60/((2*60)*20) = 25 ms for 1 tooth event + float satRpm = CONFIG(triggerCompSensorSatRpm) * RPM_1_BYTE_PACKING_MULT; + hystUpdatePeriodNumEvents = getTriggerSize(); // = 116 for "60-2" trigger wheel + float saturatedToothDurationUs = 60.0f * US_PER_SECOND_F / satRpm / hystUpdatePeriodNumEvents; + saturatedVrFreqNt = 1.0f / US2NT(saturatedToothDurationUs); + + scheduleMsg(logger, "startTIPins(): cDac=%d hystMin=%d hystMax=%d satRpm=%.0f satFreq*1k=%f period=%d", + centeredDacValue, dacHysteresisMin, dacHysteresisMax, satRpm, saturatedVrFreqNt * 1000.0f, hystUpdatePeriodNumEvents); +#ifdef EFI_TRIGGER_COMP_ADAPTIVE_HYSTERESIS + scheduleMsg(logger, "startTIPins(): ADAPTIVE_HYSTERESIS enabled!"); +#endif /* EFI_TRIGGER_COMP_ADAPTIVE_HYSTERESIS */ + int channel = EFI_COMP_TRIGGER_CHANNEL; // todo: use getInputCaptureChannel(hwPin); // todo: set pin mode to default (analog/comparator) @@ -89,7 +142,7 @@ void startTriggerInputPins(void) { // no generic hal support for extended COMP configuration, so we use hal_lld layer... osalSysLock(); - comp_lld_set_dac_value(EFI_COMP_PRIMARY_DEVICE, vDac); + comp_lld_set_dac_value(EFI_COMP_PRIMARY_DEVICE, centeredDacValue); comp_lld_channel_enable(EFI_COMP_PRIMARY_DEVICE, channel); osalSysUnlock(); @@ -98,8 +151,13 @@ void startTriggerInputPins(void) { } void stopTriggerInputPins(void) { - if (!isCompEnabled) + if (!isCompEnabled) { + scheduleMsg(logger, "stopTIPins(): already disabled!"); return; + } + + scheduleMsg(logger, "stopTIPins();"); + compDisable(EFI_COMP_PRIMARY_DEVICE); isCompEnabled = false; #if 0 diff --git a/firmware/hw_layer/trigger_input_exti.cpp b/firmware/hw_layer/trigger_input_exti.cpp index c6beacbb6b..ac136bbdf1 100644 --- a/firmware/hw_layer/trigger_input_exti.cpp +++ b/firmware/hw_layer/trigger_input_exti.cpp @@ -32,7 +32,7 @@ static void shaft_callback(void *arg) { return; bool isPrimary = pal_line == primary_line; - if (!isPrimary && !TRIGGER_SHAPE(needSecondTriggerInput)) { + if (!isPrimary && !TRIGGER_WAVEFORM(needSecondTriggerInput)) { return; } @@ -73,11 +73,11 @@ void turnOnTriggerInputPin(const char *msg, int index, bool isTriggerShaft) { * * do not set to both edges if we need only one * * simplify callback in case of one edge */ ioline_t pal_line = PAL_LINE(getHwPort("trg", brainPin), getHwPin("trg", brainPin)); - efiExtiEnablePin(msg, brainPin, PAL_EVENT_MODE_BOTH_EDGES, isVvtShaft ? shaft_callback : cam_callback, (void *)pal_line); + efiExtiEnablePin(msg, brainPin, PAL_EVENT_MODE_BOTH_EDGES, isTriggerShaft ? shaft_callback : cam_callback, (void *)pal_line); } void turnOffTriggerInputPin(brain_pin_e brainPin) { - stopDigitalCapture("trigger", brainPin); + efiExtiDisablePin(brainPin); } void setPrimaryChannel(brain_pin_e brainPin) { diff --git a/firmware/hw_layer/trigger_input_icu.cpp b/firmware/hw_layer/trigger_input_icu.cpp index 1c06d11374..f3f0eb2260 100644 --- a/firmware/hw_layer/trigger_input_icu.cpp +++ b/firmware/hw_layer/trigger_input_icu.cpp @@ -51,7 +51,7 @@ static void shaftWidthCallback(bool isPrimary) { // todo: start using real event time from HW event, not just software timer? if (hasFirmwareErrorFlag) return; - if (!isPrimary && !TRIGGER_SHAPE(needSecondTriggerInput)) { + if (!isPrimary && !TRIGGER_WAVEFORM(needSecondTriggerInput)) { return; } // icucnt_t last_width = icuGetWidth(icup); so far we are fine with system time @@ -68,7 +68,7 @@ static void shaftPeriodCallback(bool isPrimary) { icuWidthPeriodCounter++; if (hasFirmwareErrorFlag) return; - if (!isPrimary && !TRIGGER_SHAPE(needSecondTriggerInput)) { + if (!isPrimary && !TRIGGER_WAVEFORM(needSecondTriggerInput)) { return; } diff --git a/firmware/hw_layer/vehicle_speed.cpp b/firmware/hw_layer/vehicle_speed.cpp index 79b02bc53a..fda3a57af5 100644 --- a/firmware/hw_layer/vehicle_speed.cpp +++ b/firmware/hw_layer/vehicle_speed.cpp @@ -52,7 +52,7 @@ static void vsAnaWidthCallback(void) { static void speedInfo(void) { scheduleMsg(logger, "VSS input at %s", - hwPortname(CONFIGB(vehicleSpeedSensorInputPin))); + hwPortname(CONFIG(vehicleSpeedSensorInputPin))); scheduleMsg(logger, "c=%.2f eventCounter=%d speed=%.2f", engineConfiguration->vehicleSpeedCoef, @@ -63,17 +63,17 @@ static void speedInfo(void) { } bool hasVehicleSpeedSensor() { - return CONFIGB(vehicleSpeedSensorInputPin) != GPIO_UNASSIGNED; + return CONFIG(vehicleSpeedSensorInputPin) != GPIO_UNASSIGNED; } void stopVSSPins(void) { - stopDigitalCapture("VSS", activeConfiguration.bc.vehicleSpeedSensorInputPin); + stopDigitalCapture("VSS", activeConfiguration.vehicleSpeedSensorInputPin); } void startVSSPins(void) { if (!hasVehicleSpeedSensor()) return; - digital_input_s* vehicleSpeedInput = addWaveAnalyzerDriver("VSS", CONFIGB(vehicleSpeedSensorInputPin)); + digital_input_s* vehicleSpeedInput = addWaveAnalyzerDriver("VSS", CONFIG(vehicleSpeedSensorInputPin)); startInputDriver("VSS", vehicleSpeedInput, true); vehicleSpeedInput->widthListeners.registerCallback((VoidInt) vsAnaWidthCallback, NULL); } diff --git a/firmware/integration/rusefi_config.txt b/firmware/integration/rusefi_config.txt index 543fade4c2..f94af55680 100644 --- a/firmware/integration/rusefi_config.txt +++ b/firmware/integration/rusefi_config.txt @@ -87,6 +87,8 @@ struct_no_prefix engine_configuration_s #define CLT_TIMING_CURVE_SIZE 8 #define IDLE_VE_CURVE_SIZE 8 +#define ETB_COUNT 2 + #define AUX_DIGITAL_VALVE_COUNT 2 #define IAT_CURVE_SIZE 16 @@ -116,7 +118,15 @@ struct_no_prefix engine_configuration_s #define FUEL_LOAD_COUNT 16 #define PEDAL_TO_TPS_SIZE 8 + + +! +! all the xxx_PACKING_xxx constants are about persisting tables in compact for, for example packing RPM with 50 increment in a byte +! or packing numeric voltage inside an integer byte +! See usages of '@@RPM_1_BYTE_PACKING_MULT@@' where we apply the TS part of the magic +! #define RPM_1_BYTE_PACKING_MULT 50 +#define VOLTAGE_1_BYTE_PACKING_DIV 0.02 #define FSIO_TABLE_8 8 @@ -166,16 +176,16 @@ int16_t rpm;+This sets the RPM limit below which the ECU will use cranking fuel end_struct #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", "Trigger Sync", "Electronic Throttle", "Executor", "Bench Test / TS commands", "Aux Valves", "Analog inputs #1", "INSTANT_RPM", "FSIO_EXPRESSION", "Status", "CJ125", "CAN", "MAP", "Metrics", "ETB#2", "Ion Sense", "TLE8888", "Analog inputs #2", "Dwell Metric", "Aux Temperature", "ETB Logic" -custom debug_mode_e 4 bits, U32, @OFFSET@, [0:5], @@debug_mode_e_enum@@ +custom debug_mode_e 4 bits, U32, @OFFSET@, [0:7], @@debug_mode_e_enum@@ #define vvt_mode_e_enum "First half", "Second half", "2GZ", "Miata NB2", "mode4", "mode5", "mode6", "mode7" -custom vvt_mode_e 4 bits, U32, @OFFSET@, [0:2], @@vvt_mode_e_enum@@ +custom vvt_mode_e 4 bits, U32, @OFFSET@, [0:7], @@vvt_mode_e_enum@@ #define can_device_mode_e_enum "v0", "v1" -custom can_device_mode_e 4 bits, U32, @OFFSET@, [0:2], @@can_device_mode_e_enum@@ +custom can_device_mode_e 4 bits, U32, @OFFSET@, [0:7], @@can_device_mode_e_enum@@ #define mass_storage_e_enum "Auto", "Always", "Never" -custom mass_storage_e 4 bits, U32, @OFFSET@, [0:1], @@mass_storage_e_enum@@ +custom mass_storage_e 4 bits, U32, @OFFSET@, [0:7], @@mass_storage_e_enum@@ ! At the moment TIM1, TIM2, TIM3 and TIM9 are configured as ICU ! todo: as of ChibiOS3, only channels 1 & 2 are allowed to capture input, that's a ChibiOS driver limitation @@ -200,7 +210,7 @@ custom output_pin_e 1 bits, U08, @OFFSET@, [0:7], @@output_pin_e_enum@@ #define pin_output_mode_e_enum "default", "default inverted", "open collector", "open collector inverted" -custom pin_output_mode_e 1 bits, U08, @OFFSET@, [0:1], @@pin_output_mode_e_enum@@ +custom pin_output_mode_e 1 bits, U08, @OFFSET@, [0:7], @@pin_output_mode_e_enum@@ custom pin_input_mode_e 1 scalar, U08, @OFFSET@, "todo", 1, 0, 0, 20, 1 @@ -211,12 +221,12 @@ struct spi_pins end_struct -custom air_pressure_sensor_type_e 4 bits, U32, @OFFSET@, [0:3] "Custom", "DENSO183", "MPX4250", "HONDA3BAR", "NEON_2003", "22012AA090", "3 Bar", "MPX4100", "Toyota 89420-02010", "MPX4250A", "INVALID" +custom air_pressure_sensor_type_e 4 bits, U32, @OFFSET@, [0:7] "Custom", "DENSO183", "MPX4250", "HONDA3BAR", "NEON_2003", "22012AA090", "3 Bar", "MPX4100", "Toyota 89420-02010", "MPX4250A", "INVALID" ! ! lower 16 values are used on stm32 rusEfi, values above 16 are related to Kinetis work in progress ! #define adc_channel_e_enum "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "PB12", "PB13", "PC14", "PC15", "PC16", "PC17", "PD3", "PD4", "PE2", "PE6", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" -custom adc_channel_e 1 bits, U08, @OFFSET@, [0:4] @@adc_channel_e_enum@@ +custom adc_channel_e 1 bits, U08, @OFFSET@, [0:7] @@adc_channel_e_enum@@ struct air_pressure_sensor_config_s float lowValue;kPa value at low volts;"kpa", 1, 0, -400, 800, 2 @@ -260,7 +270,7 @@ struct ThermistorConf @brief Thermistor curve parameters adc_channel_e adcChannel; end_struct -custom engine_type_e 4 bits, S32, @OFFSET@, [0:2], "AUDI_AAN", "DODGE_NEON_1995", "FORD_ASPIRE_1996", "FORD_FIESTA", "NISSAN_PRIMERA", "HONDA_ACCORD", "FORD_INLINE_6_1995", "GY6_139QMB" +custom engine_type_e 4 bits, S32, @OFFSET@, [0:7], "AUDI_AAN", "DODGE_NEON_1995", "FORD_ASPIRE_1996", "FORD_FIESTA", "NISSAN_PRIMERA", "HONDA_ACCORD", "FORD_INLINE_6_1995", "GY6_139QMB" engine_type_e engineType;http://rusefi.com/wiki/index.php?title=Manual:Engine_Type\nset engine_type X int engineSnifferRpmThreshold;Engine sniffer would be disabled above this rpm\nset engineSnifferRpmThreshold X;"RPM", 1, 0, 0,30000, 0 @@ -297,8 +307,8 @@ bit isVerboseAuxPid4; bit useBiQuadAnalogFiltering; bit cj125isUaDivided; bit cj125isLsu49; -bit etb1_use_two_wires; -bit etb2_use_two_wires; +bit etb_use_two_wires; +bit unusedHereo_wires; bit showSdCardWarning; bit cj125isUrDivided;looks like 3v range should be enough, divider not needed bit useTLE8888_hall_mode; @@ -318,7 +328,7 @@ bit issue_294_30; bit issue_294_31; -int16_t tpsMin;Closed throttle. todo: extract these two fields into a structure\ntodo: we need two sets of TPS parameters - modern ETBs have two sensors\nSee also tps1_1AdcChannel\nset tps_min X;"ADC", 1, 0, 0, 1023, 0 +int16_t tpsMin;Closed throttle. todo: extract these two fields into a structure\nSee also tps1_1AdcChannel\nset tps_min X;"ADC", 1, 0, 0, 1023, 0 int16_t tpsMax;Full throttle. tpsMax value as 10 bit ADC value. Not Voltage!\nSee also tps1_1AdcChannel\nset tps_max X;"ADC", 1, 0, 0, 1023, 0 int16_t tpsErrorDetectionTooLow;+TPS error detection, what TPS % value is unrealistically low;"%", 1, 0, -40, 200, 0 @@ -348,7 +358,7 @@ float[DWELL_CURVE_SIZE] sparkDwellRpmBins;On single-coil or wasted spark setups struct_no_prefix specs_s float displacement;Engine displacement, in litres\nsee also cylindersCount;"L", 1, 0, 0, 1000.0, 2 -custom cylinders_count_t 4 bits, U32, @OFFSET@, [0:3], "INVALID", 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, "INVALID", "INVALID", "INVALID" +custom cylinders_count_t 4 bits, U32, @OFFSET@, [0:7], "INVALID", 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, "INVALID", "INVALID", "INVALID" cylinders_count_t cylindersCount; ! see firing_order.h @@ -357,7 +367,7 @@ cylinders_count_t cylindersCount; ! FO_1_8_4_3_6_5_7_2 = 5 ! FO_1_2_4_5_3 = 6 -custom firing_order_e 4 bits, U32, @OFFSET@, [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", "fo20", "fo21", "fo22", "INVALID" +custom firing_order_e 4 bits, U32, @OFFSET@, [0:7], "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", "fo20", "fo21", "fo22", "INVALID" firing_order_e firingOrder; end_struct @@ -370,17 +380,17 @@ int sensorSnifferRpmThreshold;+Disable sensor sniffer above this rpm;"RPM", #define engine_load_mode_e_enum "MAF", "Alpha-N/TPS", "MAP", "SPEED DENSITY", "MAF Air Charge" -custom engine_load_mode_e 4 bits, U32, @OFFSET@, [0:2], @@engine_load_mode_e_enum@@ +custom engine_load_mode_e 4 bits, U32, @OFFSET@, [0:7], @@engine_load_mode_e_enum@@ engine_load_mode_e fuelAlgorithm;+This setting controls which fuel quantity control algorithm is used.\nSee also useTPSAdvanceTable\nset algorithm X -custom injection_mode_e 4 bits, U32, @OFFSET@, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" +custom injection_mode_e 4 bits, U32, @OFFSET@, [0:7], "Simultaneous", "Sequential", "Batch", "Single Point" injection_mode_e crankingInjectionMode;+This is the injection strategy during engine start. See Fuel/Injection settings for more detail. It is suggested to use "Simultaneous". injection_mode_e 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 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" +custom ignition_mode_e 4 bits, U32, @OFFSET@, [0:7], "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 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 @@ -403,16 +413,16 @@ float fsio_visible fanOffTemperature;+Cooling fan turn-off temperature threshold float vehicleSpeedCoef;+This coefficient translates vehicle speed input frequency (in Hz) into vehicle speed, km/h;"coef", 1, 0, 0.01, 2000.0, 2 -custom can_nbc_e 4 bits, U32, @OFFSET@, [0:1], "BMW", "FIAT", "VAG" , "MAZDA RX8" +custom can_nbc_e 4 bits, U32, @OFFSET@, [0:7], "BMW", "FIAT", "VAG" , "MAZDA RX8" can_nbc_e canNbcType;set can_mode X int canSleepPeriodMs;CANbus thread period, ms;"ms", 1, 0, 0, 1000.0, 2 -custom operation_mode_e 4 bits, U32, @OFFSET@, [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" +custom operation_mode_e 4 bits, U32, @OFFSET@, [0:7], "INVALID", "4 stroke without cam sensor", "4 stroke with cam sensor", "2 stroke", "4 stroke with symmetrical crank (requires VVT input)", "INVALID", "INVALID", "INVALID" operation_mode_e 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 -custom display_mode_e 4 bits, U32, @OFFSET@, [0:1], "none", "hd44780", "hd44780 over pcf8574", "INVALID" +custom display_mode_e 4 bits, U32, @OFFSET@, [0:7], "none", "hd44780", "hd44780 over pcf8574", "INVALID" display_mode_e displayMode; custom log_format_e 4 bits, U32, @OFFSET@, [0:0], "native", "Mega Log Viewer" @@ -436,7 +446,7 @@ custom bool32_t 4 bits, U32, @OFFSET@, [0:0], "false", "true" #define trigger_type_e_enum "custom toothed wheel", "Ford Aspire", "Dodge Neon 1995", "Miata NA", "Miata NB", "GM_7X", "Cooper R50", "Mazda SOHC 4", "60/2", "36/1", "Honda 4+24+1", "Mitsubishi", "Honda 4+24", "Honda 1+4+24", "Dodge Neon 2003", "Mazda DOHC 1+4", "1+1", "1+60/2", "Single Tooth", "Dodge Ram 1+16", "60/2 VW", "Honda 1+24", "Dodge Stratus", "36_2_2_2", "Nissan Primera", "2JZ", "Rover K", "GM LS 24", "Honda CBR 600", "2JZ_1_12", "Honda CBR 600 custom", "3/1 skipped" , "Dodge Neon 2003 crank", "Miata VVT", "trg34", "trg35", "Subaru 7+6", "Jeep 18-2-2-2", "WIP", "Dodge Neon 1995 crank only", "Jeep XJ 4 cyl", "FiatIAQ_P8", "Mazda Z5", "trg43", "trg44", "trg45", "INVALID" -custom trigger_type_e 4 bits, U32, @OFFSET@, [0:5], @@trigger_type_e_enum@@ +custom trigger_type_e 4 bits, U32, @OFFSET@, [0:7], @@trigger_type_e_enum@@ trigger_type_e type;set trigger_type X bit unusedCustomIsSynchronizationNeeded; @@ -449,7 +459,7 @@ end_struct trigger_config_s trigger; -custom spi_device_e 1 bits,U32, @OFFSET@, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4" +custom spi_device_e 1 bits,U32, @OFFSET@, [0:7], "Off", "SPI1", "SPI2", "SPI3", "SPI4" spi_device_e hip9011SpiDevice; adc_channel_e high_fuel_pressure_sensor_1; adc_channel_e high_fuel_pressure_sensor_2; @@ -458,7 +468,7 @@ custom spi_device_e 1 bits,U32, @OFFSET@, [0:2], "Off", "SPI1", "SPI2", "SPI3" float globalFuelCorrection;set global_fuel_correction X;"coef", 1, 0.0, 0, 1000.0, 2 - float adcVcc;; "volts", 1, 0.0, 0, 4.0, 3 + float adcVcc;; "volts", 1, 0.0, 0, 6.0, 3 float maxKnockSubDeg;maximum total number of degrees to subtract from ignition advance\nwhen knocking brain_input_pin_e[CAM_INPUTS_COUNT iterate] camInputs;+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 @@ -549,9 +559,11 @@ spi_device_e digitalPotentiometerSpiDevice;Digital Potentiometer is used by stoc pin_output_mode_e mc33972_csPinMode; -custom adc_channel_mode_e 4 bits, U32, @OFFSET@, [0:1], "Off", "Slow", "Fast", "INVALID" +custom adc_channel_mode_e 4 bits, U32, @OFFSET@, [0:7], "Off", "Slow", "Fast", "INVALID" - etb_io etb1 + adc_channel_e auxFastSensor1_adcChannel;Useful in Research&Development phase + uint8_t[3] unused556; + float fuelLevelEmptyTankVoltage;;"V", 1, 0, 0,10, 2 float fuelLevelFullTankVoltage;;"V", 1, 0, 0,10, 2 @@ -639,11 +651,13 @@ pin_output_mode_e hip9011IntHoldPinMode; -custom uart_device_e 1 bits,U32, @OFFSET@, [0:1], "Off", "UART1", "UART2", "UART3" +custom uart_device_e 1 bits,U32, @OFFSET@, [0:7], "Off", "UART1", "UART2", "UART3" int16_t sdCardPeriodMs;+SD card logging period, in milliseconds;"ms", 1, 0, 0, 30000, 0 brain_pin_e debugSetTimer - uint8_t[1] unusedSpiPadding2; - uint8_t[4] unuseduartPadding1; + brain_pin_e debugMapAveraging; + brain_pin_e starterRelayPin; + pin_output_mode_e starterRelayPinMode; + uint8_t[2] unuseduartPadding1; int mapMinBufferLength;;"count", 1, 0, 0, 24, 0 int16_t idlePidDeactivationTpsThreshold;;"%", 1, 0, 0, 100.0, 0 @@ -686,33 +700,39 @@ custom fsio_setting_t 4 scalar, F32, @OFFSET@, "Val", 1, 0, 0, uart_device_e consoleUartDevice; -#define sensor_chart_e_enum "none", "trigger", "MAP", "RPM ACCEL", "DETAILED RPM", "INVALID" -custom sensor_chart_e 4 bits, S32, @OFFSET@, [0:2], @@sensor_chart_e_enum@@ +#define sensor_chart_e_enum "none", "trigger", "MAP", "RPM ACCEL", "DETAILED RPM", "Fast Aux1", "INVALID", "INVALID" +custom sensor_chart_e 4 bits, S32, @OFFSET@, [0:7], @@sensor_chart_e_enum@@ sensor_chart_e sensorChartMode;+rusEfi console Sensor Sniffer mode #define ego_sensor_e_enum "BPSX", "Innovate", "14Point7", "Narrow", "PLX", "Custom" -custom ego_sensor_e 4 bits, S32, @OFFSET@, [0:2], @@ego_sensor_e_enum@@ +custom ego_sensor_e 4 bits, S32, @OFFSET@, [0:7], @@ego_sensor_e_enum@@ #define maf_sensor_type_e_enum "v0", "v1", "v2", "v3" -custom maf_sensor_type_e 4 bits, S32, @OFFSET@, [0:2], @@maf_sensor_type_e_enum@@ +custom maf_sensor_type_e 4 bits, S32, @OFFSET@, [0:7], @@maf_sensor_type_e_enum@@ -maf_sensor_type_e mafSensorType; +! todo: keep moving all these fields at the end of board_configuration_s below 'board_configuration_s bc' +! end of board_configuration_s +end_struct + +board_configuration_s bc; + maf_sensor_type_e mafSensorType; + + custom le_formula_t 200 string, ASCII, @OFFSET@, 200 brain_pin_e[FSIO_COMMAND_COUNT iterate] fsioDigitalInputs;todo:not finished\nThese input pins allow us to pull toggle buttons state; brain_input_pin_e vehicleSpeedSensorInputPin; switch_input_pin_e clutchUpPin;Some vehicles have a switch to indicate that clutch pedal is all the way up brain_input_pin_e frequencyReportingMapInputPin; pin_input_mode_e clutchUpPinMode; - float etbIdleRange;;"angle", 1, 0, -100, 100, 2 - bit clutchUpPinInverted - bit clutchDownPinInverted - int[121] unusedAtBoardConfigurationEnd; -end_struct -custom le_formula_t 200 string, ASCII, @OFFSET@, 200 - -board_configuration_s bc; -bit vvtDisplayInverted + float unused + bit todoClutchUpPinInverted + bit todoClutchDownPinInverted + etb_io[ETB_COUNT iterate] etbIo +! our strategy is to get rid of "boardConfiguration" and make everything just "engineConfiguration". Please do not add new fields into legacy "bc" area. + int[119] unusedAtOldBoardConfigurationEnd; + + bit vvtDisplayInverted bit fuelClosedLoopCorrectionEnabled;+Enables lambda sensor closed loop feedback for fuelling. bit isVerboseIAC;+Print details into rusEfi console bit isVerboseETB;+Prints ETB details to rusEFI console @@ -775,7 +795,7 @@ bit useSeparateAdvanceForCranking;+This activates a separate advance table for c bit useAdvanceCorrectionsForCranking;+This enables the various ignition corrections during cranking (IAT, CLT, FSIO and PID idle). bit useTPSAdvanceTable;+This flag allows to use TPS for ignition lookup while in Speed Density Fuel Mode bit etbCalibrationOnStart -bit unused_1484_bit_21 +bit useIacPidMultTable;+This flag allows to use a special 'PID Multiplier' table (0.0-1.0) to compensate for nonlinear nature of IAC-RPM controller bit unused_1484_bit_22 bit unused_1484_bit_23 bit unused_1484_bit_24 @@ -824,7 +844,7 @@ float[BARO_CORR_SIZE] baroCorrRpmBins;;"RPM", 1, 0, 0.0, 18000, baro_corr_table_t baroCorrTable; #define pin_mode_e_enum "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" -custom pin_mode_e 1 bits, U08, @OFFSET@, [0:6], @@pin_mode_e_enum@@ +custom pin_mode_e 1 bits, U08, @OFFSET@, [0:7], @@pin_mode_e_enum@@ float[CRANKING_CURVE_SIZE] crankingTpsCoef;Cranking fuel correction coefficient based on TPS;"Ratio", 1, 0, 0.0, 700.0, 2 @@ -839,7 +859,9 @@ custom pin_mode_e 1 bits, U08, @OFFSET@, [0:6], @@pin_mode_e_enum@@ float fuelRailPressure;; "kPa", 1, 0.0, 0, 1000.0, 2 float alternator_derivativeFilterLoss;; "x", 1, 0.0, -1000000, 1000000, 4 float alternator_antiwindupFreq;; "x", 1, 0.0, -1000000, 1000000, 4 - uint8_t[8] unusedFormerWarmupAfrPid; +int16_t tps2Min;Closed throttle#2. todo: extract these two fields into a structure\nSee also tps2_1AdcChannel\nset tps2_min X;"ADC", 1, 0, 0, 1023, 0 +int16_t tps2Max;Full throttle#2. tpsMax value as 10 bit ADC value. Not Voltage!\nSee also tps1_1AdcChannel\nset tps2_max X;"ADC", 1, 0, 0, 1023, 0 + uint8_t[4] unusedFormerWarmupAfrPid; ! todo: mapErrorDetectionIdleTooLow? 30kPa is usually lowest on idle float mapErrorDetectionTooLow;kPa value which is too low to be true;"kPa", 1, 0, -100.0, 100.0, 2 @@ -1047,7 +1069,7 @@ tChargeMode_e tChargeMode; int16_t etb_iTermMin;iTerm min value;"", 1, 0, -30000, 30000.0, 0 int16_t etb_iTermMax;iTerm max value;"", 1, 0, -30000, 30000.0, 0 float etbDeadband;;"", 1, 0, 0, 100.0, 2 - etb_io etb2 + uint8_t[4] unused1059; pid_s idleTimingPid;See useIdleTimingPidControl int16_t idleTimingPidWorkZone;+When the current RPM is closer than this value to the target, closed-loop idle timing control is enabled.;"RPM", 1, 0, 0, 1000, 0 @@ -1074,7 +1096,12 @@ tChargeMode_e tChargeMode; uint8_t[4] unusuedvref; uint8_t[4] unusuedsw; int[3] alFIn; - uint8_t[4] unusedSpiPadding3; + + uint8_t triggerCompCenterVolt;+Trigger comparator center point voltage;"V", @@VOLTAGE_1_BYTE_PACKING_DIV@@, 0, 0.0, 5.1, 2 + uint8_t triggerCompHystMin;+Trigger comparator hysteresis voltage (Min);"V", @@VOLTAGE_1_BYTE_PACKING_DIV@@, 0, 0.0, 5.1, 2 + uint8_t triggerCompHystMax;+Trigger comparator hysteresis voltage (Max);"V", @@VOLTAGE_1_BYTE_PACKING_DIV@@, 0, 0.0, 5.1, 2 + uint8_t triggerCompSensorSatRpm;+VR-sensor saturation RPM;"RPM", @@RPM_1_BYTE_PACKING_MULT@@, 0, 0.0, 12000.0, 0 + pid_s idleRpmPid2 iac_pid_mult_t iacPidMultTable; @@ -1083,6 +1110,7 @@ uint8_t[4] unusuedsw; int[565] mainUnusedEnd; +! end of engine_configuration_s end_struct engine_configuration_s engineConfiguration; @@ -1272,10 +1300,12 @@ end_struct #define GAUGE_NAME_DEBUG_I5 "debug i5" +#define CMD_PINS "pins" #define CMD_CALIBRATE_PEDAL_UP "calibrate_pedal_up" #define CMD_CALIBRATE_PEDAL_DOWN "calibrate_pedal_down" #define CMD_ETB_DUTY "set_etb_duty" +#define CMD_ENGINE_TYPE "engine_type" #define CMD_TRIGGERINFO "triggerinfo" #define CMD_WRITECONFIG "writeconfig" #define CMD_DATE "date" diff --git a/firmware/rusefi_rules.mk b/firmware/rusefi_rules.mk new file mode 100644 index 0000000000..4232098583 --- /dev/null +++ b/firmware/rusefi_rules.mk @@ -0,0 +1,5 @@ +RUSEFI_OPT=-Werror -Wno-error=pointer-sign -Wno-error=unused-function -Wno-error=unused-variable -Wno-error=sign-compare -Wno-error=unused-parameter -Werror=missing-field-initializers + +RUSEFI_OPT+=-Wno-error=missing-prototypes + +RUSEFI_OPT+=-Werror=switch \ No newline at end of file diff --git a/firmware/tunerstudio/rusefi.ini b/firmware/tunerstudio/rusefi.ini index 530847d324..85d6ffc978 100644 --- a/firmware/tunerstudio/rusefi.ini +++ b/firmware/tunerstudio/rusefi.ini @@ -85,11 +85,11 @@ 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 integration\rusefi_config.txt Tue Nov 19 09:22:33 EST 2019 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sun Dec 08 00:32:28 EST 2019 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" + engineType = bits, S32, 0, [0:7], "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 @@ -106,8 +106,8 @@ page = 1 useBiQuadAnalogFiltering= bits, U32, 76, [9:9], "false", "true" cj125isUaDivided = bits, U32, 76, [10:10], "false", "true" cj125isLsu49 = bits, U32, 76, [11:11], "false", "true" - etb1_use_two_wires = bits, U32, 76, [12:12], "false", "true" - etb2_use_two_wires = bits, U32, 76, [13:13], "false", "true" + etb_use_two_wires = bits, U32, 76, [12:12], "false", "true" + unusedHereo_wires = bits, U32, 76, [13:13], "false", "true" showSdCardWarning = bits, U32, 76, [14:14], "false", "true" cj125isUrDivided = bits, U32, 76, [15:15], "false", "true" useTLE8888_hall_mode = bits, U32, 76, [16:16], "false", "true" @@ -141,8 +141,8 @@ page = 1 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", "INVALID" - map_sensor_hwChannel = bits, U08, 248, [0:4] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "PB12", "PB13", "PC14", "PC15", "PC16", "PC17", "PD3", "PD4", "PE2", "PE6", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + map_sensor_type = bits, U32, 244, [0:7] "Custom", "DENSO183", "MPX4250", "HONDA3BAR", "NEON_2003", "22012AA090", "3 Bar", "MPX4100", "Toyota 89420-02010", "MPX4250A", "INVALID" + map_sensor_hwChannel = bits, U08, 248, [0:7] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "PB12", "PB13", "PC14", "PC15", "PC16", "PC17", "PD3", "PD4", "PE2", "PE6", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ;no TS info - skipping map_sensor_align offset 249 clt_tempC_1 = scalar, F32, 252, "*C", 1, 0, -40, 200, 1 clt_tempC_2 = scalar, F32, 256, "*C", 1, 0, -40, 200, 1 @@ -151,7 +151,7 @@ page = 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] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "PB12", "PB13", "PC14", "PC15", "PC16", "PC17", "PD3", "PD4", "PE2", "PE6", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + clt_adcChannel = bits, U08, 280, [0:7] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "PB12", "PB13", "PC14", "PC15", "PC16", "PC17", "PD3", "PD4", "PE2", "PE6", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ;no TS info - skipping clt_alignmentFill offset 281 iat_tempC_1 = scalar, F32, 284, "*C", 1, 0, -40, 200, 1 iat_tempC_2 = scalar, F32, 288, "*C", 1, 0, -40, 200, 1 @@ -160,7 +160,7 @@ page = 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] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "PB12", "PB13", "PC14", "PC15", "PC16", "PC17", "PD3", "PD4", "PE2", "PE6", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + iat_adcChannel = bits, U08, 312, [0:7] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "PB12", "PB13", "PC14", "PC15", "PC16", "PC17", "PD3", "PD4", "PE2", "PE6", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ;no TS info - skipping iat_alignmentFill offset 313 step1rpm = scalar, S32, 316, "rpm", 1, 0, 0, 20000.0, 2 step1timing = scalar, S32, 320, "deg", 1, 0, -180, 180, 2 @@ -169,17 +169,17 @@ page = 1 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", "fo20", "fo21", "fo22", "INVALID" + cylindersCount = bits, U32, 400, [0:7], "INVALID", 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, "INVALID", "INVALID", "INVALID" + firingOrder = bits, U32, 404, [0:7], "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", "fo20", "fo21", "fo22", "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", "MAP", "SPEED DENSITY", "MAF Air Charge" - crankingInjectionMode = bits, U32, 424, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" - injectionMode = bits, U32, 428, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" + fuelAlgorithm = bits, U32, 420, [0:7], "MAF", "Alpha-N/TPS", "MAP", "SPEED DENSITY", "MAF Air Charge" + crankingInjectionMode = bits, U32, 424, [0:7], "Simultaneous", "Sequential", "Batch", "Single Point" + injectionMode = bits, U32, 428, [0:7], "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:7], "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 @@ -189,57 +189,57 @@ page = 1 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:1], "BMW", "FIAT", "VAG" , "MAZDA RX8" + canNbcType = bits, U32, 480, [0:7], "BMW", "FIAT", "VAG" , "MAZDA RX8" 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" + ambiguousOperationMode = bits, U32, 488, [0:7], "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:7], "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] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "PB12", "PB13", "PC14", "PC15", "PC16", "PC17", "PD3", "PD4", "PE2", "PE6", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - vbattAdcChannel = bits, U08, 513, [0:4] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "PB12", "PB13", "PC14", "PC15", "PC16", "PC17", "PD3", "PD4", "PE2", "PE6", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fuelLevelSensor = bits, U08, 514, [0:4] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "PB12", "PB13", "PC14", "PC15", "PC16", "PC17", "PD3", "PD4", "PE2", "PE6", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tps2_1AdcChannel = bits, U08, 515, [0:4] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "PB12", "PB13", "PC14", "PC15", "PC16", "PC17", "PD3", "PD4", "PE2", "PE6", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + tps1_1AdcChannel = bits, U08, 512, [0:7] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "PB12", "PB13", "PC14", "PC15", "PC16", "PC17", "PD3", "PD4", "PE2", "PE6", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + vbattAdcChannel = bits, U08, 513, [0:7] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "PB12", "PB13", "PC14", "PC15", "PC16", "PC17", "PD3", "PD4", "PE2", "PE6", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + fuelLevelSensor = bits, U08, 514, [0:7] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "PB12", "PB13", "PC14", "PC15", "PC16", "PC17", "PD3", "PD4", "PE2", "PE6", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + tps2_1AdcChannel = bits, U08, 515, [0:7] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "PB12", "PB13", "PC14", "PC15", "PC16", "PC17", "PD3", "PD4", "PE2", "PE6", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ;no TS info - skipping overrideCrankingIgnition offset 516 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", "2JZ", "Rover K", "GM LS 24", "Honda CBR 600", "2JZ_1_12", "Honda CBR 600 custom", "3/1 skipped" , "Dodge Neon 2003 crank", "Miata VVT", "trg34", "trg35", "Subaru 7+6", "Jeep 18-2-2-2", "WIP", "Dodge Neon 1995 crank only", "Jeep XJ 4 cyl", "FiatIAQ_P8", "Mazda Z5", "trg43", "trg44", "trg45", "INVALID" + trigger_type = bits, U32, 524, [0:7], "custom toothed wheel", "Ford Aspire", "Dodge Neon 1995", "Miata NA", "Miata NB", "GM_7X", "Cooper R50", "Mazda SOHC 4", "60/2", "36/1", "Honda 4+24+1", "Mitsubishi", "Honda 4+24", "Honda 1+4+24", "Dodge Neon 2003", "Mazda DOHC 1+4", "1+1", "1+60/2", "Single Tooth", "Dodge Ram 1+16", "60/2 VW", "Honda 1+24", "Dodge Stratus", "36_2_2_2", "Nissan Primera", "2JZ", "Rover K", "GM LS 24", "Honda CBR 600", "2JZ_1_12", "Honda CBR 600 custom", "3/1 skipped" , "Dodge Neon 2003 crank", "Miata VVT", "trg34", "trg35", "Subaru 7+6", "Jeep 18-2-2-2", "WIP", "Dodge Neon 1995 crank only", "Jeep XJ 4 cyl", "FiatIAQ_P8", "Mazda Z5", "trg43", "trg44", "trg45", "INVALID" trigger_unusedCustomIsSynchronizationNeeded= bits, U32, 528, [0:0], "false", "true" trigger_unusedCustomNeedSecondTriggerInput= bits, U32, 528, [1:1], "false", "true" trigger_useOnlyFirstChannel= bits, U32, 528, [2:2], "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" - high_fuel_pressure_sensor_1 = bits, U08, 541, [0:4] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "PB12", "PB13", "PC14", "PC15", "PC16", "PC17", "PD3", "PD4", "PE2", "PE6", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - high_fuel_pressure_sensor_2 = bits, U08, 542, [0:4] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "PB12", "PB13", "PC14", "PC15", "PC16", "PC17", "PD3", "PD4", "PE2", "PE6", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - mafAdcChannel = bits, U08, 543, [0:4] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "PB12", "PB13", "PC14", "PC15", "PC16", "PC17", "PD3", "PD4", "PE2", "PE6", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + hip9011SpiDevice = bits,U32, 540, [0:7], "Off", "SPI1", "SPI2", "SPI3", "SPI4" + high_fuel_pressure_sensor_1 = bits, U08, 541, [0:7] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "PB12", "PB13", "PC14", "PC15", "PC16", "PC17", "PD3", "PD4", "PE2", "PE6", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + high_fuel_pressure_sensor_2 = bits, U08, 542, [0:7] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "PB12", "PB13", "PC14", "PC15", "PC16", "PC17", "PD3", "PD4", "PE2", "PE6", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + mafAdcChannel = bits, U08, 543, [0:7] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "PB12", "PB13", "PC14", "PC15", "PC16", "PC17", "PD3", "PD4", "PE2", "PE6", "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, 4.0, 3 + adcVcc = scalar, F32, 548, "volts", 1, 0.0, 0, 6.0, 3 ;no TS info - skipping maxKnockSubDeg offset 552 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" 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" 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" 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" - afr_hwChannel = bits, U08, 560, [0:4] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "PB12", "PB13", "PC14", "PC15", "PC16", "PC17", "PD3", "PD4", "PE2", "PE6", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + afr_hwChannel = bits, U08, 560, [0:7] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "PB12", "PB13", "PC14", "PC15", "PC16", "PC17", "PD3", "PD4", "PE2", "PE6", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ;no TS info - skipping afr_alignAf offset 561 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] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "PB12", "PB13", "PC14", "PC15", "PC16", "PC17", "PD3", "PD4", "PE2", "PE6", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + throttlePedalPositionAdcChannel = bits, U08, 580, [0:7] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "PB12", "PB13", "PC14", "PC15", "PC16", "PC17", "PD3", "PD4", "PE2", "PE6", "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" - tle6240_csPinMode = bits, U08, 582, [0:1], "default", "default inverted", "open collector", "open collector inverted" + tle6240_csPinMode = bits, U08, 582, [0:7], "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" 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", "INVALID" - baroSensor_hwChannel = bits, U08, 596, [0:4] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "PB12", "PB13", "PC14", "PC15", "PC16", "PC17", "PD3", "PD4", "PE2", "PE6", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + baroSensor_type = bits, U32, 592, [0:7] "Custom", "DENSO183", "MPX4250", "HONDA3BAR", "NEON_2003", "22012AA090", "3 Bar", "MPX4100", "Toyota 89420-02010", "MPX4250A", "INVALID" + baroSensor_hwChannel = bits, U08, 596, [0:7] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "PB12", "PB13", "PC14", "PC15", "PC16", "PC17", "PD3", "PD4", "PE2", "PE6", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ;no TS info - skipping baroSensor_align offset 597 idle_solenoidFrequency = scalar, S32, 600, "Hz", 1, 0, 0, 3000, 0 idle_solenoidPin = bits, U08, 604, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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" + idle_solenoidPinMode = bits, U08, 607, [0:7], "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 @@ -268,8 +268,8 @@ page = 1 ignitionPins10 = bits, U08, 645, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16", "MC33972_1", "MC33972_2", "MC33972_3", "MC33972_4", "MC33972_5", "MC33972_6", "MC33972_7", "MC33972_8", "MC33972_9", "MC33972_10", "MC33972_11", "MC33972_12", "MC33972_13", "MC33972_14", "MC33972_15", "MC33972_16", "MC33972_17", "MC33972_18", "MC33972_19", "MC33972_20", "MC33972_21", "MC33972_22", "TLE8888_1", "TLE8888_2", "TLE8888_3", "TLE8888_4", "TLE8888_5", "TLE8888_6", "TLE8888_7", "TLE8888_8", "TLE8888_9", "TLE8888_10", "TLE8888_11", "TLE8888_12", "TLE8888_13", "TLE8888_14", "TLE8888_15", "TLE8888_16", "TLE8888_17", "TLE8888_18", "TLE8888_19", "TLE8888_20", "TLE8888_21", "TLE8888_22", "TLE8888_23", "TLE8888_24", "TLE8888_25", "TLE8888_26", "TLE8888_27", "TLE8888_28", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ignitionPins11 = bits, U08, 646, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16", "MC33972_1", "MC33972_2", "MC33972_3", "MC33972_4", "MC33972_5", "MC33972_6", "MC33972_7", "MC33972_8", "MC33972_9", "MC33972_10", "MC33972_11", "MC33972_12", "MC33972_13", "MC33972_14", "MC33972_15", "MC33972_16", "MC33972_17", "MC33972_18", "MC33972_19", "MC33972_20", "MC33972_21", "MC33972_22", "TLE8888_1", "TLE8888_2", "TLE8888_3", "TLE8888_4", "TLE8888_5", "TLE8888_6", "TLE8888_7", "TLE8888_8", "TLE8888_9", "TLE8888_10", "TLE8888_11", "TLE8888_12", "TLE8888_13", "TLE8888_14", "TLE8888_15", "TLE8888_16", "TLE8888_17", "TLE8888_18", "TLE8888_19", "TLE8888_20", "TLE8888_21", "TLE8888_22", "TLE8888_23", "TLE8888_24", "TLE8888_25", "TLE8888_26", "TLE8888_27", "TLE8888_28", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ignitionPins12 = bits, U08, 647, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16", "MC33972_1", "MC33972_2", "MC33972_3", "MC33972_4", "MC33972_5", "MC33972_6", "MC33972_7", "MC33972_8", "MC33972_9", "MC33972_10", "MC33972_11", "MC33972_12", "MC33972_13", "MC33972_14", "MC33972_15", "MC33972_16", "MC33972_17", "MC33972_18", "MC33972_19", "MC33972_20", "MC33972_21", "MC33972_22", "TLE8888_1", "TLE8888_2", "TLE8888_3", "TLE8888_4", "TLE8888_5", "TLE8888_6", "TLE8888_7", "TLE8888_8", "TLE8888_9", "TLE8888_10", "TLE8888_11", "TLE8888_12", "TLE8888_13", "TLE8888_14", "TLE8888_15", "TLE8888_16", "TLE8888_17", "TLE8888_18", "TLE8888_19", "TLE8888_20", "TLE8888_21", "TLE8888_22", "TLE8888_23", "TLE8888_24", "TLE8888_25", "TLE8888_26", "TLE8888_27", "TLE8888_28", "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" + injectionPinMode = bits, U08, 648, [0:7], "default", "default inverted", "open collector", "open collector inverted" + ignitionPinMode = bits, U08, 649, [0:7], "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" 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" 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" @@ -279,41 +279,39 @@ page = 1 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" 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" fuelPumpPin = bits, U08, 658, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16", "MC33972_1", "MC33972_2", "MC33972_3", "MC33972_4", "MC33972_5", "MC33972_6", "MC33972_7", "MC33972_8", "MC33972_9", "MC33972_10", "MC33972_11", "MC33972_12", "MC33972_13", "MC33972_14", "MC33972_15", "MC33972_16", "MC33972_17", "MC33972_18", "MC33972_19", "MC33972_20", "MC33972_21", "MC33972_22", "TLE8888_1", "TLE8888_2", "TLE8888_3", "TLE8888_4", "TLE8888_5", "TLE8888_6", "TLE8888_7", "TLE8888_8", "TLE8888_9", "TLE8888_10", "TLE8888_11", "TLE8888_12", "TLE8888_13", "TLE8888_14", "TLE8888_15", "TLE8888_16", "TLE8888_17", "TLE8888_18", "TLE8888_19", "TLE8888_20", "TLE8888_21", "TLE8888_22", "TLE8888_23", "TLE8888_24", "TLE8888_25", "TLE8888_26", "TLE8888_27", "TLE8888_28", "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" + fuelPumpPinMode = bits, U08, 659, [0:7], "default", "default inverted", "open collector", "open collector inverted" malfunctionIndicatorPin = bits, U08, 660, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16", "MC33972_1", "MC33972_2", "MC33972_3", "MC33972_4", "MC33972_5", "MC33972_6", "MC33972_7", "MC33972_8", "MC33972_9", "MC33972_10", "MC33972_11", "MC33972_12", "MC33972_13", "MC33972_14", "MC33972_15", "MC33972_16", "MC33972_17", "MC33972_18", "MC33972_19", "MC33972_20", "MC33972_21", "MC33972_22", "TLE8888_1", "TLE8888_2", "TLE8888_3", "TLE8888_4", "TLE8888_5", "TLE8888_6", "TLE8888_7", "TLE8888_8", "TLE8888_9", "TLE8888_10", "TLE8888_11", "TLE8888_12", "TLE8888_13", "TLE8888_14", "TLE8888_15", "TLE8888_16", "TLE8888_17", "TLE8888_18", "TLE8888_19", "TLE8888_20", "TLE8888_21", "TLE8888_22", "TLE8888_23", "TLE8888_24", "TLE8888_25", "TLE8888_26", "TLE8888_27", "TLE8888_28", "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" + malfunctionIndicatorPinMode = bits, U08, 661, [0:7], "default", "default inverted", "open collector", "open collector inverted" + fanPinMode = bits, U08, 662, [0:7], "default", "default inverted", "open collector", "open collector inverted" fanPin = bits, U08, 663, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16", "MC33972_1", "MC33972_2", "MC33972_3", "MC33972_4", "MC33972_5", "MC33972_6", "MC33972_7", "MC33972_8", "MC33972_9", "MC33972_10", "MC33972_11", "MC33972_12", "MC33972_13", "MC33972_14", "MC33972_15", "MC33972_16", "MC33972_17", "MC33972_18", "MC33972_19", "MC33972_20", "MC33972_21", "MC33972_22", "TLE8888_1", "TLE8888_2", "TLE8888_3", "TLE8888_4", "TLE8888_5", "TLE8888_6", "TLE8888_7", "TLE8888_8", "TLE8888_9", "TLE8888_10", "TLE8888_11", "TLE8888_12", "TLE8888_13", "TLE8888_14", "TLE8888_15", "TLE8888_16", "TLE8888_17", "TLE8888_18", "TLE8888_19", "TLE8888_20", "TLE8888_21", "TLE8888_22", "TLE8888_23", "TLE8888_24", "TLE8888_25", "TLE8888_26", "TLE8888_27", "TLE8888_28", "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" alternatorControlPin = bits, U08, 665, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16", "MC33972_1", "MC33972_2", "MC33972_3", "MC33972_4", "MC33972_5", "MC33972_6", "MC33972_7", "MC33972_8", "MC33972_9", "MC33972_10", "MC33972_11", "MC33972_12", "MC33972_13", "MC33972_14", "MC33972_15", "MC33972_16", "MC33972_17", "MC33972_18", "MC33972_19", "MC33972_20", "MC33972_21", "MC33972_22", "TLE8888_1", "TLE8888_2", "TLE8888_3", "TLE8888_4", "TLE8888_5", "TLE8888_6", "TLE8888_7", "TLE8888_8", "TLE8888_9", "TLE8888_10", "TLE8888_11", "TLE8888_12", "TLE8888_13", "TLE8888_14", "TLE8888_15", "TLE8888_16", "TLE8888_17", "TLE8888_18", "TLE8888_19", "TLE8888_20", "TLE8888_21", "TLE8888_22", "TLE8888_23", "TLE8888_24", "TLE8888_25", "TLE8888_26", "TLE8888_27", "TLE8888_28", "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" + alternatorControlPinMode = bits, U08, 666, [0:7], "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" 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" 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" 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" - electronicThrottlePin1Mode = bits, U08, 672, [0:1], "default", "default inverted", "open collector", "open collector inverted" + electronicThrottlePin1Mode = bits, U08, 672, [0:7], "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" 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" - max31855spiDevice = bits,U32, 675, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4" + max31855spiDevice = bits,U32, 675, [0:7], "Off", "SPI1", "SPI2", "SPI3", "SPI4" 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" - digitalPotentiometerSpiDevice = bits,U32, 677, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4" + digitalPotentiometerSpiDevice = bits,U32, 677, [0:7], "Off", "SPI1", "SPI2", "SPI3", "SPI4" 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" - mc33972_csPinMode = bits, U08, 679, [0:1], "default", "default inverted", "open collector", "open collector inverted" - etb1_directionPin1 = bits, U08, 680, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etb1_directionPin2 = bits, U08, 681, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etb1_controlPin1 = bits, U08, 682, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etb1_controlPinMode = bits, U08, 683, [0:1], "default", "default inverted", "open collector", "open collector inverted" + mc33972_csPinMode = bits, U08, 679, [0:7], "default", "default inverted", "open collector", "open collector inverted" + auxFastSensor1_adcChannel = bits, U08, 680, [0:7] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "PB12", "PB13", "PC14", "PC15", "PC16", "PC17", "PD3", "PD4", "PE2", "PE6", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" +;no TS info - skipping unused556 offset 681 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" + afr_type = bits, S32, 692, [0:7], "BPSX", "Innovate", "14Point7", "Narrow", "PLX", "Custom" fuelClosedLoopAfrLowThreshold = scalar, F32, 696, "ratio", 1, 0, 0, 100, 1 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" 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" 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" - hip9011CsPinMode = bits, U08, 703, [0:1], "default", "default inverted", "open collector", "open collector inverted" + hip9011CsPinMode = bits, U08, 703, [0:7], "default", "default inverted", "open collector", "open collector inverted" tachOutputPin = bits, U08, 704, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16", "MC33972_1", "MC33972_2", "MC33972_3", "MC33972_4", "MC33972_5", "MC33972_6", "MC33972_7", "MC33972_8", "MC33972_9", "MC33972_10", "MC33972_11", "MC33972_12", "MC33972_13", "MC33972_14", "MC33972_15", "MC33972_16", "MC33972_17", "MC33972_18", "MC33972_19", "MC33972_20", "MC33972_21", "MC33972_22", "TLE8888_1", "TLE8888_2", "TLE8888_3", "TLE8888_4", "TLE8888_5", "TLE8888_6", "TLE8888_7", "TLE8888_8", "TLE8888_9", "TLE8888_10", "TLE8888_11", "TLE8888_12", "TLE8888_13", "TLE8888_14", "TLE8888_15", "TLE8888_16", "TLE8888_17", "TLE8888_18", "TLE8888_19", "TLE8888_20", "TLE8888_21", "TLE8888_22", "TLE8888_23", "TLE8888_24", "TLE8888_25", "TLE8888_26", "TLE8888_27", "TLE8888_28", "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" + tachOutputPinMode = bits, U08, 705, [0:7], "default", "default inverted", "open collector", "open collector inverted" mainRelayPin = bits, U08, 706, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16", "MC33972_1", "MC33972_2", "MC33972_3", "MC33972_4", "MC33972_5", "MC33972_6", "MC33972_7", "MC33972_8", "MC33972_9", "MC33972_10", "MC33972_11", "MC33972_12", "MC33972_13", "MC33972_14", "MC33972_15", "MC33972_16", "MC33972_17", "MC33972_18", "MC33972_19", "MC33972_20", "MC33972_21", "MC33972_22", "TLE8888_1", "TLE8888_2", "TLE8888_3", "TLE8888_4", "TLE8888_5", "TLE8888_6", "TLE8888_7", "TLE8888_8", "TLE8888_9", "TLE8888_10", "TLE8888_11", "TLE8888_12", "TLE8888_13", "TLE8888_14", "TLE8888_15", "TLE8888_16", "TLE8888_17", "TLE8888_18", "TLE8888_19", "TLE8888_20", "TLE8888_21", "TLE8888_22", "TLE8888_23", "TLE8888_24", "TLE8888_25", "TLE8888_26", "TLE8888_27", "TLE8888_28", "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" 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" @@ -325,15 +323,15 @@ page = 1 ;no TS info - skipping lcdThreadPeriodMs offset 720 ;no TS info - skipping generalPeriodicThreadPeriodMs offset 724 tunerStudioSerialSpeed = scalar, U32, 728, "BPs", 1, 0, 0,1000000, 0 - canDeviceMode = bits, U32, 732, [0:2], "v0", "v1" + canDeviceMode = bits, U32, 732, [0:7], "v0", "v1" 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" 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" 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" - 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" + triggerSimulatorPinModes1 = bits, U08, 739, [0:7], "default", "default inverted", "open collector", "open collector inverted" + triggerSimulatorPinModes2 = bits, U08, 740, [0:7], "default", "default inverted", "open collector", "open collector inverted" + triggerSimulatorPinModes3 = bits, U08, 741, [0:7], "default", "default inverted", "open collector", "open collector inverted" o2heaterPin = bits, U08, 742, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16", "MC33972_1", "MC33972_2", "MC33972_3", "MC33972_4", "MC33972_5", "MC33972_6", "MC33972_7", "MC33972_8", "MC33972_9", "MC33972_10", "MC33972_11", "MC33972_12", "MC33972_13", "MC33972_14", "MC33972_15", "MC33972_16", "MC33972_17", "MC33972_18", "MC33972_19", "MC33972_20", "MC33972_21", "MC33972_22", "TLE8888_1", "TLE8888_2", "TLE8888_3", "TLE8888_4", "TLE8888_5", "TLE8888_6", "TLE8888_7", "TLE8888_8", "TLE8888_9", "TLE8888_10", "TLE8888_11", "TLE8888_12", "TLE8888_13", "TLE8888_14", "TLE8888_15", "TLE8888_16", "TLE8888_17", "TLE8888_18", "TLE8888_19", "TLE8888_20", "TLE8888_21", "TLE8888_22", "TLE8888_23", "TLE8888_24", "TLE8888_25", "TLE8888_26", "TLE8888_27", "TLE8888_28", "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" + o2heaterPinModeTodO = bits, U08, 743, [0:7], "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" @@ -370,28 +368,28 @@ page = 1 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" 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" 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" - mainRelayPinMode = bits, U08, 752, [0:1], "default", "default inverted", "open collector", "open collector inverted" + mainRelayPinMode = bits, U08, 752, [0:7], "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" 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" - hip9011IntHoldPinMode = bits, U08, 755, [0:1], "default", "default inverted", "open collector", "open collector inverted" + hip9011IntHoldPinMode = bits, U08, 755, [0:7], "default", "default inverted", "open collector", "open collector inverted" ;no TS info - skipping logicAnalyzerMode offset 756 ;no TS info - skipping unrealisticRpmThreashold offset 760 - 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" + gpioPinModes1 = bits, U08, 764, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes2 = bits, U08, 765, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes3 = bits, U08, 766, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes4 = bits, U08, 767, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes5 = bits, U08, 768, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes6 = bits, U08, 769, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes7 = bits, U08, 770, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes8 = bits, U08, 771, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes9 = bits, U08, 772, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes10 = bits, U08, 773, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes11 = bits, U08, 774, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes12 = bits, U08, 775, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes13 = bits, U08, 776, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes14 = bits, U08, 777, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes15 = bits, U08, 778, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes16 = bits, U08, 779, [0:7], "default", "default inverted", "open collector", "open collector inverted" fsioOutputPins1 = bits, U08, 780, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16", "MC33972_1", "MC33972_2", "MC33972_3", "MC33972_4", "MC33972_5", "MC33972_6", "MC33972_7", "MC33972_8", "MC33972_9", "MC33972_10", "MC33972_11", "MC33972_12", "MC33972_13", "MC33972_14", "MC33972_15", "MC33972_16", "MC33972_17", "MC33972_18", "MC33972_19", "MC33972_20", "MC33972_21", "MC33972_22", "TLE8888_1", "TLE8888_2", "TLE8888_3", "TLE8888_4", "TLE8888_5", "TLE8888_6", "TLE8888_7", "TLE8888_8", "TLE8888_9", "TLE8888_10", "TLE8888_11", "TLE8888_12", "TLE8888_13", "TLE8888_14", "TLE8888_15", "TLE8888_16", "TLE8888_17", "TLE8888_18", "TLE8888_19", "TLE8888_20", "TLE8888_21", "TLE8888_22", "TLE8888_23", "TLE8888_24", "TLE8888_25", "TLE8888_26", "TLE8888_27", "TLE8888_28", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" fsioOutputPins2 = bits, U08, 781, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16", "MC33972_1", "MC33972_2", "MC33972_3", "MC33972_4", "MC33972_5", "MC33972_6", "MC33972_7", "MC33972_8", "MC33972_9", "MC33972_10", "MC33972_11", "MC33972_12", "MC33972_13", "MC33972_14", "MC33972_15", "MC33972_16", "MC33972_17", "MC33972_18", "MC33972_19", "MC33972_20", "MC33972_21", "MC33972_22", "TLE8888_1", "TLE8888_2", "TLE8888_3", "TLE8888_4", "TLE8888_5", "TLE8888_6", "TLE8888_7", "TLE8888_8", "TLE8888_9", "TLE8888_10", "TLE8888_11", "TLE8888_12", "TLE8888_13", "TLE8888_14", "TLE8888_15", "TLE8888_16", "TLE8888_17", "TLE8888_18", "TLE8888_19", "TLE8888_20", "TLE8888_21", "TLE8888_22", "TLE8888_23", "TLE8888_24", "TLE8888_25", "TLE8888_26", "TLE8888_27", "TLE8888_28", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" fsioOutputPins3 = bits, U08, 782, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16", "MC33972_1", "MC33972_2", "MC33972_3", "MC33972_4", "MC33972_5", "MC33972_6", "MC33972_7", "MC33972_8", "MC33972_9", "MC33972_10", "MC33972_11", "MC33972_12", "MC33972_13", "MC33972_14", "MC33972_15", "MC33972_16", "MC33972_17", "MC33972_18", "MC33972_19", "MC33972_20", "MC33972_21", "MC33972_22", "TLE8888_1", "TLE8888_2", "TLE8888_3", "TLE8888_4", "TLE8888_5", "TLE8888_6", "TLE8888_7", "TLE8888_8", "TLE8888_9", "TLE8888_10", "TLE8888_11", "TLE8888_12", "TLE8888_13", "TLE8888_14", "TLE8888_15", "TLE8888_16", "TLE8888_17", "TLE8888_18", "TLE8888_19", "TLE8888_20", "TLE8888_21", "TLE8888_22", "TLE8888_23", "TLE8888_24", "TLE8888_25", "TLE8888_26", "TLE8888_27", "TLE8888_28", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" @@ -418,17 +416,19 @@ page = 1 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" sdCardPeriodMs = scalar, S16, 804, "ms", 1, 0, 0, 30000, 0 debugSetTimer = bits, U08, 806, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" -;no TS info - skipping unusedSpiPadding2 offset 807 -;no TS info - skipping unuseduartPadding1 offset 808 + 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" + starterRelayPin = bits, U08, 808, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + starterRelayPinMode = bits, U08, 809, [0:7], "default", "default inverted", "open collector", "open collector inverted" +;no TS info - skipping unuseduartPadding1 offset 810 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 miataNb2VVTRatioFrom = scalar, F32, 820, "value", 1, 0, 0, 1000, 5 miataNb2VVTRatioTo = scalar, F32, 824, "value", 1, 0, 0, 1000, 5 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" - triggerErrorPinMode = bits, U08, 829, [0:1], "default", "default inverted", "open collector", "open collector inverted" + triggerErrorPinMode = bits, U08, 829, [0:7], "default", "default inverted", "open collector", "open collector inverted" acRelayPin = bits, U08, 830, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16", "MC33972_1", "MC33972_2", "MC33972_3", "MC33972_4", "MC33972_5", "MC33972_6", "MC33972_7", "MC33972_8", "MC33972_9", "MC33972_10", "MC33972_11", "MC33972_12", "MC33972_13", "MC33972_14", "MC33972_15", "MC33972_16", "MC33972_17", "MC33972_18", "MC33972_19", "MC33972_20", "MC33972_21", "MC33972_22", "TLE8888_1", "TLE8888_2", "TLE8888_3", "TLE8888_4", "TLE8888_5", "TLE8888_6", "TLE8888_7", "TLE8888_8", "TLE8888_9", "TLE8888_10", "TLE8888_11", "TLE8888_12", "TLE8888_13", "TLE8888_14", "TLE8888_15", "TLE8888_16", "TLE8888_17", "TLE8888_18", "TLE8888_19", "TLE8888_20", "TLE8888_21", "TLE8888_22", "TLE8888_23", "TLE8888_24", "TLE8888_25", "TLE8888_26", "TLE8888_27", "TLE8888_28", "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" + acRelayPinMode = bits, U08, 831, [0:7], "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 @@ -476,9 +476,9 @@ page = 1 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" 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" 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" - consoleUartDevice = bits,U32, 943, [0:1], "Off", "UART1", "UART2", "UART3" - sensorChartMode = bits, S32, 944, [0:2], "none", "trigger", "MAP", "RPM ACCEL", "DETAILED RPM", "INVALID" - mafSensorType = bits, S32, 948, [0:2], "v0", "v1", "v2", "v3" + consoleUartDevice = bits,U32, 943, [0:7], "Off", "UART1", "UART2", "UART3" + sensorChartMode = bits, S32, 944, [0:7], "none", "trigger", "MAP", "RPM ACCEL", "DETAILED RPM", "Fast Aux1", "INVALID", "INVALID" + mafSensorType = bits, S32, 948, [0:7], "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" 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" 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" @@ -499,10 +499,18 @@ page = 1 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" 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" clutchUpPinMode = scalar, U08, 971, "todo", 1, 0, 0, 20, 1 - etbIdleRange = scalar, F32, 972, "angle", 1, 0, -100, 100, 2 - clutchUpPinInverted = bits, U32, 976, [0:0], "false", "true" - clutchDownPinInverted = bits, U32, 976, [1:1], "false", "true" -;no TS info - skipping unusedAtBoardConfigurationEnd offset 980 +;no TS info - skipping unused offset 972 + todoClutchUpPinInverted = bits, U32, 976, [0:0], "false", "true" + todoClutchDownPinInverted= bits, U32, 976, [1:1], "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" + 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" + 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" + etbIo1_controlPinMode = bits, U08, 983, [0:7], "default", "default inverted", "open collector", "open collector inverted" + 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" + 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" + 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" + etbIo2_controlPinMode = bits, U08, 987, [0:7], "default", "default inverted", "open collector", "open collector inverted" +;no TS info - skipping unusedAtOldBoardConfigurationEnd offset 988 vvtDisplayInverted = bits, U32, 1464, [0:0], "false", "true" fuelClosedLoopCorrectionEnabled= bits, U32, 1464, [1:1], "false", "true" isVerboseIAC = bits, U32, 1464, [2:2], "false", "true" @@ -535,9 +543,9 @@ page = 1 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] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "PB12", "PB13", "PC14", "PC15", "PC16", "PC17", "PD3", "PD4", "PE2", "PE6", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - acSwitchAdc = bits, U08, 1469, [0:4] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "PB12", "PB13", "PC14", "PC15", "PC16", "PC17", "PD3", "PD4", "PE2", "PE6", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - vRefAdcChannel = bits, U08, 1470, [0:4] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "PB12", "PB13", "PC14", "PC15", "PC16", "PC17", "PD3", "PD4", "PE2", "PE6", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + hipOutputChannel = bits, U08, 1468, [0:7] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "PB12", "PB13", "PC14", "PC15", "PC16", "PC17", "PD3", "PD4", "PE2", "PE6", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + acSwitchAdc = bits, U08, 1469, [0:7] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "PB12", "PB13", "PC14", "PC15", "PC16", "PC17", "PD3", "PD4", "PE2", "PE6", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + vRefAdcChannel = bits, U08, 1470, [0:7] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "PB12", "PB13", "PC14", "PC15", "PC16", "PC17", "PD3", "PD4", "PE2", "PE6", "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" @@ -561,7 +569,7 @@ page = 1 useAdvanceCorrectionsForCranking= bits, U32, 1476, [18:18], "false", "true" useTPSAdvanceTable = bits, U32, 1476, [19:19], "false", "true" etbCalibrationOnStart = bits, U32, 1476, [20:20], "false", "true" - unused_1484_bit_21 = bits, U32, 1476, [21:21], "false", "true" + useIacPidMultTable = bits, U32, 1476, [21:21], "false", "true" unused_1484_bit_22 = bits, U32, 1476, [22:22], "false", "true" unused_1484_bit_23 = bits, U32, 1476, [23:23], "false", "true" unused_1484_bit_24 = bits, U32, 1476, [24:24], "false", "true" @@ -628,7 +636,9 @@ page = 1 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 -;no TS info - skipping unusedFormerWarmupAfrPid offset 1768 + tps2Min = scalar, S16, 1768, "ADC", 1, 0, 0, 1023, 0 + tps2Max = scalar, S16, 1770, "ADC", 1, 0, 0, 1023, 0 +;no TS info - skipping unusedFormerWarmupAfrPid offset 1772 mapErrorDetectionTooLow = scalar, F32, 1776, "kPa", 1, 0, -100.0, 100.0, 2 mapErrorDetectionTooHigh = scalar, F32, 1780, "kPa", 1, 0, -100.0, 800.0, 2 step1RpmWindow = scalar, S32, 1784, "rpm", 1, 0, 0, 3000.0, 2 @@ -677,15 +687,15 @@ page = 1 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", "Trigger Sync", "Electronic Throttle", "Executor", "Bench Test / TS commands", "Aux Valves", "Analog inputs #1", "INSTANT_RPM", "FSIO_EXPRESSION", "Status", "CJ125", "CAN", "MAP", "Metrics", "ETB#2", "Ion Sense", "TLE8888", "Analog inputs #2", "Dwell Metric", "Aux Temperature", "ETB Logic" + debugMode = bits, U32, 2092, [0:7], "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", "Trigger Sync", "Electronic Throttle", "Executor", "Bench Test / TS commands", "Aux Valves", "Analog inputs #1", "INSTANT_RPM", "FSIO_EXPRESSION", "Status", "CJ125", "CAN", "MAP", "Metrics", "ETB#2", "Ion Sense", "TLE8888", "Analog inputs #2", "Dwell Metric", "Aux Temperature", "ETB Logic" ;no TS info - skipping unused_former_warmup_target_afr offset 2096 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] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "PB12", "PB13", "PC14", "PC15", "PC16", "PC17", "PD3", "PD4", "PE2", "PE6", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioAdc2 = bits, U08, 2201, [0:4] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "PB12", "PB13", "PC14", "PC15", "PC16", "PC17", "PD3", "PD4", "PE2", "PE6", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioAdc3 = bits, U08, 2202, [0:4] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "PB12", "PB13", "PC14", "PC15", "PC16", "PC17", "PD3", "PD4", "PE2", "PE6", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioAdc4 = bits, U08, 2203, [0:4] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "PB12", "PB13", "PC14", "PC15", "PC16", "PC17", "PD3", "PD4", "PE2", "PE6", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + fsioAdc1 = bits, U08, 2200, [0:7] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "PB12", "PB13", "PC14", "PC15", "PC16", "PC17", "PD3", "PD4", "PE2", "PE6", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + fsioAdc2 = bits, U08, 2201, [0:7] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "PB12", "PB13", "PC14", "PC15", "PC16", "PC17", "PD3", "PD4", "PE2", "PE6", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + fsioAdc3 = bits, U08, 2202, [0:7] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "PB12", "PB13", "PC14", "PC15", "PC16", "PC17", "PD3", "PD4", "PE2", "PE6", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + fsioAdc4 = bits, U08, 2203, [0:7] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "PB12", "PB13", "PC14", "PC15", "PC16", "PC17", "PD3", "PD4", "PE2", "PE6", "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 @@ -694,10 +704,10 @@ page = 1 auxPidPins2 = bits, U08, 2221, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16", "MC33972_1", "MC33972_2", "MC33972_3", "MC33972_4", "MC33972_5", "MC33972_6", "MC33972_7", "MC33972_8", "MC33972_9", "MC33972_10", "MC33972_11", "MC33972_12", "MC33972_13", "MC33972_14", "MC33972_15", "MC33972_16", "MC33972_17", "MC33972_18", "MC33972_19", "MC33972_20", "MC33972_21", "MC33972_22", "TLE8888_1", "TLE8888_2", "TLE8888_3", "TLE8888_4", "TLE8888_5", "TLE8888_6", "TLE8888_7", "TLE8888_8", "TLE8888_9", "TLE8888_10", "TLE8888_11", "TLE8888_12", "TLE8888_13", "TLE8888_14", "TLE8888_15", "TLE8888_16", "TLE8888_17", "TLE8888_18", "TLE8888_19", "TLE8888_20", "TLE8888_21", "TLE8888_22", "TLE8888_23", "TLE8888_24", "TLE8888_25", "TLE8888_26", "TLE8888_27", "TLE8888_28", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" auxPidPins3 = bits, U08, 2222, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16", "MC33972_1", "MC33972_2", "MC33972_3", "MC33972_4", "MC33972_5", "MC33972_6", "MC33972_7", "MC33972_8", "MC33972_9", "MC33972_10", "MC33972_11", "MC33972_12", "MC33972_13", "MC33972_14", "MC33972_15", "MC33972_16", "MC33972_17", "MC33972_18", "MC33972_19", "MC33972_20", "MC33972_21", "MC33972_22", "TLE8888_1", "TLE8888_2", "TLE8888_3", "TLE8888_4", "TLE8888_5", "TLE8888_6", "TLE8888_7", "TLE8888_8", "TLE8888_9", "TLE8888_10", "TLE8888_11", "TLE8888_12", "TLE8888_13", "TLE8888_14", "TLE8888_15", "TLE8888_16", "TLE8888_17", "TLE8888_18", "TLE8888_19", "TLE8888_20", "TLE8888_21", "TLE8888_22", "TLE8888_23", "TLE8888_24", "TLE8888_25", "TLE8888_26", "TLE8888_27", "TLE8888_28", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" auxPidPins4 = bits, U08, 2223, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16", "MC33972_1", "MC33972_2", "MC33972_3", "MC33972_4", "MC33972_5", "MC33972_6", "MC33972_7", "MC33972_8", "MC33972_9", "MC33972_10", "MC33972_11", "MC33972_12", "MC33972_13", "MC33972_14", "MC33972_15", "MC33972_16", "MC33972_17", "MC33972_18", "MC33972_19", "MC33972_20", "MC33972_21", "MC33972_22", "TLE8888_1", "TLE8888_2", "TLE8888_3", "TLE8888_4", "TLE8888_5", "TLE8888_6", "TLE8888_7", "TLE8888_8", "TLE8888_9", "TLE8888_10", "TLE8888_11", "TLE8888_12", "TLE8888_13", "TLE8888_14", "TLE8888_15", "TLE8888_16", "TLE8888_17", "TLE8888_18", "TLE8888_19", "TLE8888_20", "TLE8888_21", "TLE8888_22", "TLE8888_23", "TLE8888_24", "TLE8888_25", "TLE8888_26", "TLE8888_27", "TLE8888_28", "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" - cj125CsPinMode = bits, U08, 2225, [0:1], "default", "default inverted", "open collector", "open collector inverted" + cj125SpiDevice = bits,U32, 2224, [0:7], "Off", "SPI1", "SPI2", "SPI3", "SPI4" + cj125CsPinMode = bits, U08, 2225, [0:7], "default", "default inverted", "open collector", "open collector inverted" dizzySparkOutputPin = bits, U08, 2226, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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" + dizzySparkOutputPinMode = bits, U08, 2227, [0:7], "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 @@ -708,10 +718,10 @@ page = 1 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" + storageMode = bits, U32, 2260, [0:7], "Auto", "Always", "Never" 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], "First half", "Second half", "2GZ", "Miata NB2", "mode4", "mode5", "mode6", "mode7" + vvtMode = bits, U32, 2328, [0:7], "First half", "Second half", "2GZ", "Miata NB2", "mode4", "mode5", "mode6", "mode7" biQuad_a0 = scalar, F32, 2332, "v", 1, 0, -1000, 1000, 9 biQuad_a1 = scalar, F32, 2336, "v", 1, 0, -1000, 1000, 9 biQuad_a2 = scalar, F32, 2340, "v", 1, 0, -1000, 1000, 9 @@ -733,7 +743,7 @@ page = 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] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "PB12", "PB13", "PC14", "PC15", "PC16", "PC17", "PD3", "PD4", "PE2", "PE6", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + auxTempSensor1_adcChannel = bits, U08, 2472, [0:7] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "PB12", "PB13", "PC14", "PC15", "PC16", "PC17", "PD3", "PD4", "PE2", "PE6", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ;no TS info - skipping auxTempSensor1_alignmentFill offset 2473 auxTempSensor2_tempC_1 = scalar, F32, 2476, "*C", 1, 0, -40, 200, 1 auxTempSensor2_tempC_2 = scalar, F32, 2480, "*C", 1, 0, -40, 200, 1 @@ -742,7 +752,7 @@ page = 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] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "PB12", "PB13", "PC14", "PC15", "PC16", "PC17", "PD3", "PD4", "PE2", "PE6", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + auxTempSensor2_adcChannel = bits, U08, 2504, [0:7] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "PB12", "PB13", "PC14", "PC15", "PC16", "PC17", "PD3", "PD4", "PE2", "PE6", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ;no TS info - skipping auxTempSensor2_alignmentFill offset 2505 fuelClosedLoopCltThreshold = scalar, S16, 2508, "C", 1, 0, 0, 100, 0 fuelClosedLoopTpsThreshold = scalar, S16, 2510, "%", 1, 0, 0, 100, 0 @@ -769,23 +779,23 @@ page = 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" + sdCardSpiDevice = bits,U32, 2592, [0:7], "Off", "SPI1", "SPI2", "SPI3", "SPI4" ;no TS info - skipping unusedSpiPadding4 offset 2593 - 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" - 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" - 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" - 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" - 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" - 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" - 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" - 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" - 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" - stepperEnablePinMode = bits, U08, 2605, [0:1], "default", "default inverted", "open collector", "open collector inverted" + spi1SckMode = bits, U08, 2596, [0:7], "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" + spi1MosiMode = bits, U08, 2597, [0:7], "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" + spi1MisoMode = bits, U08, 2598, [0:7], "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" + spi2SckMode = bits, U08, 2599, [0:7], "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" + spi2MosiMode = bits, U08, 2600, [0:7], "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" + spi2MisoMode = bits, U08, 2601, [0:7], "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" + spi3SckMode = bits, U08, 2602, [0:7], "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" + spi3MosiMode = bits, U08, 2603, [0:7], "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" + spi3MisoMode = bits, U08, 2604, [0:7], "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" + stepperEnablePinMode = bits, U08, 2605, [0:7], "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" 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" 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" - cj125ua = bits, U08, 2609, [0:4] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "PB12", "PB13", "PC14", "PC15", "PC16", "PC17", "PD3", "PD4", "PE2", "PE6", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - cj125ur = bits, U08, 2610, [0:4] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "PB12", "PB13", "PC14", "PC15", "PC16", "PC17", "PD3", "PD4", "PE2", "PE6", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + cj125ua = bits, U08, 2609, [0:7] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "PB12", "PB13", "PC14", "PC15", "PC16", "PC17", "PD3", "PD4", "PE2", "PE6", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + cj125ur = bits, U08, 2610, [0:7] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "PB12", "PB13", "PC14", "PC15", "PC16", "PC17", "PD3", "PD4", "PE2", "PE6", "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 @@ -815,13 +825,13 @@ page = 1 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] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "PB12", "PB13", "PC14", "PC15", "PC16", "PC17", "PD3", "PD4", "PE2", "PE6", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + oilPressure_hwChannel = bits, U08, 2692, [0:7] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "PB12", "PB13", "PC14", "PC15", "PC16", "PC17", "PD3", "PD4", "PE2", "PE6", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ;no TS info - skipping oilPressure_align offset 2693 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" + accelerometerSpiDevice = bits,U32, 2712, [0:7], "Off", "SPI1", "SPI2", "SPI3", "SPI4" ;no TS info - skipping unusedSpiPadding5 offset 2713 fsioCurve1Bins = array, F32, 2716, [16], "x", 1, 0, -999, 1000.0, 3 fsioCurve1 = array, F32, 2780, [16], "y", 1, 0, -999, 1000.0, 3 @@ -833,11 +843,11 @@ page = 1 fsioCurve4 = array, F32, 3068, [8], "y", 1, 0, -999, 1000.0, 3 ;no TS info - skipping unusedFlexFuelSensor offset 3100 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" - stepperDirectionPinMode = bits, U08, 3102, [0:1], "default", "default inverted", "open collector", "open collector inverted" - externalKnockSenseAdc = bits, U08, 3103, [0:4] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "PB12", "PB13", "PC14", "PC15", "PC16", "PC17", "PD3", "PD4", "PE2", "PE6", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + stepperDirectionPinMode = bits, U08, 3102, [0:7], "default", "default inverted", "open collector", "open collector inverted" + externalKnockSenseAdc = bits, U08, 3103, [0:7] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "PB12", "PB13", "PC14", "PC15", "PC16", "PC17", "PD3", "PD4", "PE2", "PE6", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" stepperEnablePin = bits, U08, 3104, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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" - tle8888_csPinMode = bits, U08, 3106, [0:1], "default", "default inverted", "open collector", "open collector inverted" + tle8888_csPinMode = bits, U08, 3106, [0:7], "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" crankingAdvanceBins = array, F32, 3108, [4], "RPM", 1, 0, 0.0, 18000, 2 crankingAdvance = array, F32, 3124, [4], "deg", 1, 0, -20, 90, 2 @@ -871,10 +881,7 @@ page = 1 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 - etb2_directionPin1 = bits, U08, 3964, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etb2_directionPin2 = bits, U08, 3965, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etb2_controlPin1 = bits, U08, 3966, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etb2_controlPinMode = bits, U08, 3967, [0:1], "default", "default inverted", "open collector", "open collector inverted" +;no TS info - skipping unused1059 offset 3964 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 @@ -887,19 +894,22 @@ page = 1 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" - mc33816spiDevice = bits,U32, 4001, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4" + tle8888spiDevice = bits,U32, 4000, [0:7], "Off", "SPI1", "SPI2", "SPI3", "SPI4" + mc33816spiDevice = bits,U32, 4001, [0:7], "Off", "SPI1", "SPI2", "SPI3", "SPI4" idlerpmpid_iTermMin = scalar, S16, 4002, "", 1, 0, -30000, 30000.0, 0 - tle6240spiDevice = bits,U32, 4004, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4" + tle6240spiDevice = bits,U32, 4004, [0:7], "Off", "SPI1", "SPI2", "SPI3", "SPI4" ;no TS info - skipping unusedSpiPadding7 offset 4005 idlerpmpid_iTermMax = scalar, S16, 4006, "", 1, 0, -30000, 30000.0, 0 - mc33972spiDevice = bits,U32, 4008, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4" + mc33972spiDevice = bits,U32, 4008, [0:7], "Off", "SPI1", "SPI2", "SPI3", "SPI4" ;no TS info - skipping unusedSpiPadding8 offset 4009 etbIdleThrottleRange = scalar, F32, 4012, "%", 1, 0, 0, 15, 0 ;no TS info - skipping unusuedvref offset 4016 ;no TS info - skipping unusuedsw offset 4020 ;no TS info - skipping alFIn offset 4024 -;no TS info - skipping unusedSpiPadding3 offset 4036 + 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 @@ -1061,6 +1071,7 @@ page = 1 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" idlePidRpmUpperLimit = "Relative to the target idle RPM" 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." @@ -1097,6 +1108,10 @@ page = 1 idlePidFalloffDeltaRpm = "Taper out idle timing control over this range as the engine leaves idle conditions" tpsAccelFractionPeriod = "A delay in cycles between fuel-enrich. portions" tpsAccelFractionDivisor = "A fraction divisor: 1 or less = entire portion at once, or split into diminishing fractions" + triggerCompCenterVolt = "Trigger comparator center point voltage" + triggerCompHystMin = "Trigger comparator hysteresis voltage (Min)" + triggerCompHystMax = "Trigger comparator hysteresis voltage (Max)" + triggerCompSensorSatRpm = "VR-sensor saturation RPM" ; CONFIG_DEFINITION_END @@ -1748,6 +1763,15 @@ fileVersion = { 20190701 } 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, engineLoad + zBins = iacPidMultTable +; gridHeight = 2.0 + gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. + upDownLabel = "(Later)", "(Sooner)" + [GaugeConfigurations] gaugeCategory = Sensors - Extra 2 @@ -2095,6 +2119,7 @@ menuDialog = main # Digital outputs subMenu = mainRelay, "Main relay" + subMenu = starterRelay, "Starter relay" subMenu = fuelPump, "Fuel rail" subMenu = fanSetting, "Fan" subMenu = tachSettings, "Tachometer" @@ -2167,6 +2192,8 @@ menuDialog = main 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 @@ -2585,6 +2612,12 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" 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 = triggerInputs, "Trigger Inputs" field = "!ECU reboot needed to apply these settings" field = "#Cam is primary if you have cam sensor" @@ -2593,6 +2626,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" 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 + panel = triggerInputComparator dialog = allPinsSensors, "Sensors" field = "CLT ADC input", clt_adcChannel @@ -2663,6 +2697,8 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Fan Pin Mode", fanPinMode field = "Main Relay Pin", mainRelayPin field = "Main Relay Mode", mainRelayPinMode + field = "Starter Relay Pin", starterRelayPin + field = "Starter Relay Mode", starterRelayPinMode field = "aux valve #1", auxValves1 field = "aux valve #2", auxValves2 @@ -2731,6 +2767,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Debug Trigger Sync", debugTriggerSync field = "Debug Timer Callback", debugTimerCallback field = "Debug Set Timer", debugSetTimer + field = "Aux Fast Analog", auxFastSensor1_adcChannel dialog = allPins1_3 field = "FSIO ADC #1", fsioAdc1 @@ -2953,6 +2990,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" 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 @@ -3006,6 +3044,10 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Pin", mainRelayPin field = "Pin mode", mainRelayPinMode + dialog = starterRelay, "Starter relay output" + field = "Pin", starterRelayPin + field = "Pin mode", starterRelayPinMode + dialog = statusLeds, "Status LEDs" field = "Running status LED", runningLedPin field = "TS communication status LED", communicationLedPin @@ -3175,7 +3217,9 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" ; Board->Connection dialog = tsPort, "TunerStudio Port" field = "tunerStudioSerialSpeed", tunerStudioSerialSpeed - field = "Use PC10/PC11 serial?", useSerialPort + field = "Use UART/TTL serial?", useSerialPort + field = "RX pin", binarySerialRxPin, {useSerialPort == 1} + field = "TX pin", binarySerialTxPin, {useSerialPort == 1} field = "uartConsoleSerialSpeed", uartConsoleSerialSpeed dialog = canBus, "CAN Bus" @@ -3218,7 +3262,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" commandButton = "Reinit", cmd_tle8888_init dialog = connection, "", yAxis - field = "STM32 vRef voltage", adcVcc + field = "ADC vRef voltage", adcVcc panel = tsPort panel = canBus panel = sdCard @@ -3479,16 +3523,17 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Pause ETB control", pauseEtbControl field = "Throttle Pedal Up", throttlePedalUpVoltage field = "Throttle Pedal Wide Open", throttlePedalWOTVoltage + field = "Two-wire mode", etb_use_two_wires, {throttlePedalPositionAdcChannel != 16} field = "PWM Frequency", etbFreq, {throttlePedalPositionAdcChannel != 16} field = etbCalibrationOnStart, etbCalibrationOnStart - field = "No1 Direction #1", etb1_directionPin1, {throttlePedalPositionAdcChannel != 16} - field = "No1 Direction #2", etb1_directionPin2, {throttlePedalPositionAdcChannel != 16} - field = "Two-wire mode", etb1_use_two_wires, {throttlePedalPositionAdcChannel != 16} - field = "No1 Control #1", etb1_controlPin1, {throttlePedalPositionAdcChannel != 16 && etb1_use_two_wires == 0} - field = "No2 Direction #1", etb2_directionPin1, {throttlePedalPositionAdcChannel != 16} - field = "No2 Direction #2", etb2_directionPin2, {throttlePedalPositionAdcChannel != 16} - field = "Two-wire mode", etb2_use_two_wires, {throttlePedalPositionAdcChannel != 16} - field = "No2 Control #1", etb2_controlPin1, {throttlePedalPositionAdcChannel != 16 && etb2_use_two_wires == 0} + field = "No1 Direction #1", etbIo1_directionPin1, {throttlePedalPositionAdcChannel != 16} + field = "No1 Direction #2", etbIo1_directionPin2, {throttlePedalPositionAdcChannel != 16} + field = "No1 Control #1", etbIo1_controlPin1, {throttlePedalPositionAdcChannel != 16 && etb_use_two_wires == 0} + field = "No2 Direction #1", etbIo2_directionPin1, {throttlePedalPositionAdcChannel != 16} + field = "No2 Direction #2", etbIo2_directionPin2, {throttlePedalPositionAdcChannel != 16} + field = "No2 Control #1", etb2_controlPin1, {throttlePedalPositionAdcChannel != 16 && etb_use_two_wires == 0} + field = "TPS#2 min", tps2Min, {etbIo2_directionPin1 != 0} + field = "TPS#2 max", tps2Max, {etbIo2_directionPin1 != 0} panel = etbPidDialog dialog = etbDialogRight diff --git a/firmware/tunerstudio/rusefi.input b/firmware/tunerstudio/rusefi.input index 89f09d181e..db5f327758 100644 --- a/firmware/tunerstudio/rusefi.input +++ b/firmware/tunerstudio/rusefi.input @@ -737,6 +737,15 @@ fileVersion = { 20190701 } 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, engineLoad + zBins = iacPidMultTable +; gridHeight = 2.0 + gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. + upDownLabel = "(Later)", "(Sooner)" + [GaugeConfigurations] gaugeCategory = Sensors - Extra 2 @@ -1084,6 +1093,7 @@ menuDialog = main # Digital outputs subMenu = mainRelay, "Main relay" + subMenu = starterRelay, "Starter relay" subMenu = fuelPump, "Fuel rail" subMenu = fanSetting, "Fan" subMenu = tachSettings, "Tachometer" @@ -1156,6 +1166,8 @@ menuDialog = main 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 @@ -1574,6 +1586,12 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" 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 = triggerInputs, "Trigger Inputs" field = "!ECU reboot needed to apply these settings" field = "#Cam is primary if you have cam sensor" @@ -1582,6 +1600,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" 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 + panel = triggerInputComparator dialog = allPinsSensors, "Sensors" field = "CLT ADC input", clt_adcChannel @@ -1652,6 +1671,8 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Fan Pin Mode", fanPinMode field = "Main Relay Pin", mainRelayPin field = "Main Relay Mode", mainRelayPinMode + field = "Starter Relay Pin", starterRelayPin + field = "Starter Relay Mode", starterRelayPinMode field = "aux valve #1", auxValves1 field = "aux valve #2", auxValves2 @@ -1720,6 +1741,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Debug Trigger Sync", debugTriggerSync field = "Debug Timer Callback", debugTimerCallback field = "Debug Set Timer", debugSetTimer + field = "Aux Fast Analog", auxFastSensor1_adcChannel dialog = allPins1_3 field = "FSIO ADC #1", fsioAdc1 @@ -1942,6 +1964,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" 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 @@ -1995,6 +2018,10 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Pin", mainRelayPin field = "Pin mode", mainRelayPinMode + dialog = starterRelay, "Starter relay output" + field = "Pin", starterRelayPin + field = "Pin mode", starterRelayPinMode + dialog = statusLeds, "Status LEDs" field = "Running status LED", runningLedPin field = "TS communication status LED", communicationLedPin @@ -2164,7 +2191,9 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" ; Board->Connection dialog = tsPort, "TunerStudio Port" field = "tunerStudioSerialSpeed", tunerStudioSerialSpeed - field = "Use PC10/PC11 serial?", useSerialPort + field = "Use UART/TTL serial?", useSerialPort + field = "RX pin", binarySerialRxPin, {useSerialPort == 1} + field = "TX pin", binarySerialTxPin, {useSerialPort == 1} field = "uartConsoleSerialSpeed", uartConsoleSerialSpeed dialog = canBus, "CAN Bus" @@ -2207,7 +2236,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" commandButton = "Reinit", cmd_tle8888_init dialog = connection, "", yAxis - field = "STM32 vRef voltage", adcVcc + field = "ADC vRef voltage", adcVcc panel = tsPort panel = canBus panel = sdCard @@ -2468,16 +2497,17 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Pause ETB control", pauseEtbControl field = "Throttle Pedal Up", throttlePedalUpVoltage field = "Throttle Pedal Wide Open", throttlePedalWOTVoltage + field = "Two-wire mode", etb_use_two_wires, {throttlePedalPositionAdcChannel != 16} field = "PWM Frequency", etbFreq, {throttlePedalPositionAdcChannel != 16} field = etbCalibrationOnStart, etbCalibrationOnStart - field = "No1 Direction #1", etb1_directionPin1, {throttlePedalPositionAdcChannel != 16} - field = "No1 Direction #2", etb1_directionPin2, {throttlePedalPositionAdcChannel != 16} - field = "Two-wire mode", etb1_use_two_wires, {throttlePedalPositionAdcChannel != 16} - field = "No1 Control #1", etb1_controlPin1, {throttlePedalPositionAdcChannel != 16 && etb1_use_two_wires == 0} - field = "No2 Direction #1", etb2_directionPin1, {throttlePedalPositionAdcChannel != 16} - field = "No2 Direction #2", etb2_directionPin2, {throttlePedalPositionAdcChannel != 16} - field = "Two-wire mode", etb2_use_two_wires, {throttlePedalPositionAdcChannel != 16} - field = "No2 Control #1", etb2_controlPin1, {throttlePedalPositionAdcChannel != 16 && etb2_use_two_wires == 0} + field = "No1 Direction #1", etbIo1_directionPin1, {throttlePedalPositionAdcChannel != 16} + field = "No1 Direction #2", etbIo1_directionPin2, {throttlePedalPositionAdcChannel != 16} + field = "No1 Control #1", etbIo1_controlPin1, {throttlePedalPositionAdcChannel != 16 && etb_use_two_wires == 0} + field = "No2 Direction #1", etbIo2_directionPin1, {throttlePedalPositionAdcChannel != 16} + field = "No2 Direction #2", etbIo2_directionPin2, {throttlePedalPositionAdcChannel != 16} + field = "No2 Control #1", etb2_controlPin1, {throttlePedalPositionAdcChannel != 16 && etb_use_two_wires == 0} + field = "TPS#2 min", tps2Min, {etbIo2_directionPin1 != 0} + field = "TPS#2 max", tps2Max, {etbIo2_directionPin1 != 0} panel = etbPidDialog dialog = etbDialogRight diff --git a/firmware/tunerstudio/rusefi_frankenso.ini b/firmware/tunerstudio/rusefi_frankenso.ini index 3824a03a27..f5ab316d62 100644 --- a/firmware/tunerstudio/rusefi_frankenso.ini +++ b/firmware/tunerstudio/rusefi_frankenso.ini @@ -85,11 +85,11 @@ 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 integration\rusefi_config.txt Tue Nov 19 09:22:38 EST 2019 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sun Dec 08 00:32:34 EST 2019 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" + engineType = bits, S32, 0, [0:7], "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 @@ -106,8 +106,8 @@ page = 1 useBiQuadAnalogFiltering= bits, U32, 76, [9:9], "false", "true" cj125isUaDivided = bits, U32, 76, [10:10], "false", "true" cj125isLsu49 = bits, U32, 76, [11:11], "false", "true" - etb1_use_two_wires = bits, U32, 76, [12:12], "false", "true" - etb2_use_two_wires = bits, U32, 76, [13:13], "false", "true" + etb_use_two_wires = bits, U32, 76, [12:12], "false", "true" + unusedHereo_wires = bits, U32, 76, [13:13], "false", "true" showSdCardWarning = bits, U32, 76, [14:14], "false", "true" cj125isUrDivided = bits, U32, 76, [15:15], "false", "true" useTLE8888_hall_mode = bits, U32, 76, [16:16], "false", "true" @@ -141,8 +141,8 @@ page = 1 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", "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" + map_sensor_type = bits, U32, 244, [0:7] "Custom", "DENSO183", "MPX4250", "HONDA3BAR", "NEON_2003", "22012AA090", "3 Bar", "MPX4100", "Toyota 89420-02010", "MPX4250A", "INVALID" + map_sensor_hwChannel = bits, U08, 248, [0:7] "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" ;no TS info - skipping map_sensor_align offset 249 clt_tempC_1 = scalar, F32, 252, "*C", 1, 0, -40, 200, 1 clt_tempC_2 = scalar, F32, 256, "*C", 1, 0, -40, 200, 1 @@ -151,7 +151,7 @@ page = 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" + clt_adcChannel = bits, U08, 280, [0:7] "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" ;no TS info - skipping clt_alignmentFill offset 281 iat_tempC_1 = scalar, F32, 284, "*C", 1, 0, -40, 200, 1 iat_tempC_2 = scalar, F32, 288, "*C", 1, 0, -40, 200, 1 @@ -160,7 +160,7 @@ page = 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" + iat_adcChannel = bits, U08, 312, [0:7] "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" ;no TS info - skipping iat_alignmentFill offset 313 step1rpm = scalar, S32, 316, "rpm", 1, 0, 0, 20000.0, 2 step1timing = scalar, S32, 320, "deg", 1, 0, -180, 180, 2 @@ -169,17 +169,17 @@ page = 1 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", "fo20", "fo21", "fo22", "INVALID" + cylindersCount = bits, U32, 400, [0:7], "INVALID", 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, "INVALID", "INVALID", "INVALID" + firingOrder = bits, U32, 404, [0:7], "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", "fo20", "fo21", "fo22", "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", "MAP", "SPEED DENSITY", "MAF Air Charge" - crankingInjectionMode = bits, U32, 424, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" - injectionMode = bits, U32, 428, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" + fuelAlgorithm = bits, U32, 420, [0:7], "MAF", "Alpha-N/TPS", "MAP", "SPEED DENSITY", "MAF Air Charge" + crankingInjectionMode = bits, U32, 424, [0:7], "Simultaneous", "Sequential", "Batch", "Single Point" + injectionMode = bits, U32, 428, [0:7], "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:7], "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 @@ -189,57 +189,57 @@ page = 1 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:1], "BMW", "FIAT", "VAG" , "MAZDA RX8" + canNbcType = bits, U32, 480, [0:7], "BMW", "FIAT", "VAG" , "MAZDA RX8" 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" + ambiguousOperationMode = bits, U32, 488, [0:7], "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:7], "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" - 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" - 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" - 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" + tps1_1AdcChannel = bits, U08, 512, [0:7] "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" + vbattAdcChannel = bits, U08, 513, [0:7] "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" + fuelLevelSensor = bits, U08, 514, [0:7] "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" + tps2_1AdcChannel = bits, U08, 515, [0:7] "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" ;no TS info - skipping overrideCrankingIgnition offset 516 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", "2JZ", "Rover K", "GM LS 24", "Honda CBR 600", "2JZ_1_12", "Honda CBR 600 custom", "3/1 skipped" , "Dodge Neon 2003 crank", "Miata VVT", "trg34", "trg35", "Subaru 7+6", "Jeep 18-2-2-2", "WIP", "Dodge Neon 1995 crank only", "Jeep XJ 4 cyl", "FiatIAQ_P8", "Mazda Z5", "trg43", "trg44", "trg45", "INVALID" + trigger_type = bits, U32, 524, [0:7], "custom toothed wheel", "Ford Aspire", "Dodge Neon 1995", "Miata NA", "Miata NB", "GM_7X", "Cooper R50", "Mazda SOHC 4", "60/2", "36/1", "Honda 4+24+1", "Mitsubishi", "Honda 4+24", "Honda 1+4+24", "Dodge Neon 2003", "Mazda DOHC 1+4", "1+1", "1+60/2", "Single Tooth", "Dodge Ram 1+16", "60/2 VW", "Honda 1+24", "Dodge Stratus", "36_2_2_2", "Nissan Primera", "2JZ", "Rover K", "GM LS 24", "Honda CBR 600", "2JZ_1_12", "Honda CBR 600 custom", "3/1 skipped" , "Dodge Neon 2003 crank", "Miata VVT", "trg34", "trg35", "Subaru 7+6", "Jeep 18-2-2-2", "WIP", "Dodge Neon 1995 crank only", "Jeep XJ 4 cyl", "FiatIAQ_P8", "Mazda Z5", "trg43", "trg44", "trg45", "INVALID" trigger_unusedCustomIsSynchronizationNeeded= bits, U32, 528, [0:0], "false", "true" trigger_unusedCustomNeedSecondTriggerInput= bits, U32, 528, [1:1], "false", "true" trigger_useOnlyFirstChannel= bits, U32, 528, [2:2], "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" - 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" - 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" - 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" + hip9011SpiDevice = bits,U32, 540, [0:7], "Off", "SPI1", "SPI2", "SPI3", "SPI4" + high_fuel_pressure_sensor_1 = bits, U08, 541, [0:7] "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" + high_fuel_pressure_sensor_2 = bits, U08, 542, [0:7] "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" + mafAdcChannel = bits, U08, 543, [0:7] "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" globalFuelCorrection = scalar, F32, 544, "coef", 1, 0.0, 0, 1000.0, 2 - adcVcc = scalar, F32, 548, "volts", 1, 0.0, 0, 4.0, 3 + adcVcc = scalar, F32, 548, "volts", 1, 0.0, 0, 6.0, 3 ;no TS info - skipping maxKnockSubDeg offset 552 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" 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" 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" 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" - 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" + afr_hwChannel = bits, U08, 560, [0:7] "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" ;no TS info - skipping afr_alignAf offset 561 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" + throttlePedalPositionAdcChannel = bits, U08, 580, [0:7] "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" 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" - tle6240_csPinMode = bits, U08, 582, [0:1], "default", "default inverted", "open collector", "open collector inverted" + tle6240_csPinMode = bits, U08, 582, [0:7], "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" 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", "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" + baroSensor_type = bits, U32, 592, [0:7] "Custom", "DENSO183", "MPX4250", "HONDA3BAR", "NEON_2003", "22012AA090", "3 Bar", "MPX4100", "Toyota 89420-02010", "MPX4250A", "INVALID" + baroSensor_hwChannel = bits, U08, 596, [0:7] "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" ;no TS info - skipping baroSensor_align offset 597 idle_solenoidFrequency = scalar, S32, 600, "Hz", 1, 0, 0, 3000, 0 idle_solenoidPin = bits, U08, 604, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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" + idle_solenoidPinMode = bits, U08, 607, [0:7], "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 @@ -268,8 +268,8 @@ page = 1 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" 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" 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" - 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" + injectionPinMode = bits, U08, 648, [0:7], "default", "default inverted", "open collector", "open collector inverted" + ignitionPinMode = bits, U08, 649, [0:7], "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" 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" 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" @@ -279,41 +279,39 @@ page = 1 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" 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" 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" - fuelPumpPinMode = bits, U08, 659, [0:1], "default", "default inverted", "open collector", "open collector inverted" + fuelPumpPinMode = bits, U08, 659, [0:7], "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" - 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" + malfunctionIndicatorPinMode = bits, U08, 661, [0:7], "default", "default inverted", "open collector", "open collector inverted" + fanPinMode = bits, U08, 662, [0:7], "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" 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" 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" - alternatorControlPinMode = bits, U08, 666, [0:1], "default", "default inverted", "open collector", "open collector inverted" + alternatorControlPinMode = bits, U08, 666, [0:7], "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" 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" 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" 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" - electronicThrottlePin1Mode = bits, U08, 672, [0:1], "default", "default inverted", "open collector", "open collector inverted" + electronicThrottlePin1Mode = bits, U08, 672, [0:7], "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" 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" - max31855spiDevice = bits,U32, 675, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4" + max31855spiDevice = bits,U32, 675, [0:7], "Off", "SPI1", "SPI2", "SPI3", "SPI4" 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" - digitalPotentiometerSpiDevice = bits,U32, 677, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4" + digitalPotentiometerSpiDevice = bits,U32, 677, [0:7], "Off", "SPI1", "SPI2", "SPI3", "SPI4" 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" - mc33972_csPinMode = bits, U08, 679, [0:1], "default", "default inverted", "open collector", "open collector inverted" - etb1_directionPin1 = bits, U08, 680, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etb1_directionPin2 = bits, U08, 681, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etb1_controlPin1 = bits, U08, 682, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etb1_controlPinMode = bits, U08, 683, [0:1], "default", "default inverted", "open collector", "open collector inverted" + mc33972_csPinMode = bits, U08, 679, [0:7], "default", "default inverted", "open collector", "open collector inverted" + auxFastSensor1_adcChannel = bits, U08, 680, [0:7] "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" +;no TS info - skipping unused556 offset 681 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" + afr_type = bits, S32, 692, [0:7], "BPSX", "Innovate", "14Point7", "Narrow", "PLX", "Custom" fuelClosedLoopAfrLowThreshold = scalar, F32, 696, "ratio", 1, 0, 0, 100, 1 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" 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" 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" - hip9011CsPinMode = bits, U08, 703, [0:1], "default", "default inverted", "open collector", "open collector inverted" + hip9011CsPinMode = bits, U08, 703, [0:7], "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" - tachOutputPinMode = bits, U08, 705, [0:1], "default", "default inverted", "open collector", "open collector inverted" + tachOutputPinMode = bits, U08, 705, [0:7], "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" 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" 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" @@ -325,15 +323,15 @@ page = 1 ;no TS info - skipping lcdThreadPeriodMs offset 720 ;no TS info - skipping generalPeriodicThreadPeriodMs offset 724 tunerStudioSerialSpeed = scalar, U32, 728, "BPs", 1, 0, 0,1000000, 0 - canDeviceMode = bits, U32, 732, [0:2], "v0", "v1" + canDeviceMode = bits, U32, 732, [0:7], "v0", "v1" 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" 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" 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" - 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" + triggerSimulatorPinModes1 = bits, U08, 739, [0:7], "default", "default inverted", "open collector", "open collector inverted" + triggerSimulatorPinModes2 = bits, U08, 740, [0:7], "default", "default inverted", "open collector", "open collector inverted" + triggerSimulatorPinModes3 = bits, U08, 741, [0:7], "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" - o2heaterPinModeTodO = bits, U08, 743, [0:1], "default", "default inverted", "open collector", "open collector inverted" + o2heaterPinModeTodO = bits, U08, 743, [0:7], "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" @@ -370,28 +368,28 @@ page = 1 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" 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" 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" - mainRelayPinMode = bits, U08, 752, [0:1], "default", "default inverted", "open collector", "open collector inverted" + mainRelayPinMode = bits, U08, 752, [0:7], "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" 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" - hip9011IntHoldPinMode = bits, U08, 755, [0:1], "default", "default inverted", "open collector", "open collector inverted" + hip9011IntHoldPinMode = bits, U08, 755, [0:7], "default", "default inverted", "open collector", "open collector inverted" ;no TS info - skipping logicAnalyzerMode offset 756 ;no TS info - skipping unrealisticRpmThreashold offset 760 - 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" + gpioPinModes1 = bits, U08, 764, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes2 = bits, U08, 765, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes3 = bits, U08, 766, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes4 = bits, U08, 767, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes5 = bits, U08, 768, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes6 = bits, U08, 769, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes7 = bits, U08, 770, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes8 = bits, U08, 771, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes9 = bits, U08, 772, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes10 = bits, U08, 773, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes11 = bits, U08, 774, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes12 = bits, U08, 775, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes13 = bits, U08, 776, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes14 = bits, U08, 777, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes15 = bits, U08, 778, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes16 = bits, U08, 779, [0:7], "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" 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" 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" @@ -418,17 +416,19 @@ page = 1 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" sdCardPeriodMs = scalar, S16, 804, "ms", 1, 0, 0, 30000, 0 debugSetTimer = bits, U08, 806, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" -;no TS info - skipping unusedSpiPadding2 offset 807 -;no TS info - skipping unuseduartPadding1 offset 808 + 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" + starterRelayPin = bits, U08, 808, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + starterRelayPinMode = bits, U08, 809, [0:7], "default", "default inverted", "open collector", "open collector inverted" +;no TS info - skipping unuseduartPadding1 offset 810 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 miataNb2VVTRatioFrom = scalar, F32, 820, "value", 1, 0, 0, 1000, 5 miataNb2VVTRatioTo = scalar, F32, 824, "value", 1, 0, 0, 1000, 5 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" - triggerErrorPinMode = bits, U08, 829, [0:1], "default", "default inverted", "open collector", "open collector inverted" + triggerErrorPinMode = bits, U08, 829, [0:7], "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" - acRelayPinMode = bits, U08, 831, [0:1], "default", "default inverted", "open collector", "open collector inverted" + acRelayPinMode = bits, U08, 831, [0:7], "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 @@ -476,9 +476,9 @@ page = 1 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" 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" 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" - consoleUartDevice = bits,U32, 943, [0:1], "Off", "UART1", "UART2", "UART3" - sensorChartMode = bits, S32, 944, [0:2], "none", "trigger", "MAP", "RPM ACCEL", "DETAILED RPM", "INVALID" - mafSensorType = bits, S32, 948, [0:2], "v0", "v1", "v2", "v3" + consoleUartDevice = bits,U32, 943, [0:7], "Off", "UART1", "UART2", "UART3" + sensorChartMode = bits, S32, 944, [0:7], "none", "trigger", "MAP", "RPM ACCEL", "DETAILED RPM", "Fast Aux1", "INVALID", "INVALID" + mafSensorType = bits, S32, 948, [0:7], "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" 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" 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" @@ -499,10 +499,18 @@ page = 1 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" 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" clutchUpPinMode = scalar, U08, 971, "todo", 1, 0, 0, 20, 1 - etbIdleRange = scalar, F32, 972, "angle", 1, 0, -100, 100, 2 - clutchUpPinInverted = bits, U32, 976, [0:0], "false", "true" - clutchDownPinInverted = bits, U32, 976, [1:1], "false", "true" -;no TS info - skipping unusedAtBoardConfigurationEnd offset 980 +;no TS info - skipping unused offset 972 + todoClutchUpPinInverted = bits, U32, 976, [0:0], "false", "true" + todoClutchDownPinInverted= bits, U32, 976, [1:1], "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" + 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" + 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" + etbIo1_controlPinMode = bits, U08, 983, [0:7], "default", "default inverted", "open collector", "open collector inverted" + 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" + 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" + 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" + etbIo2_controlPinMode = bits, U08, 987, [0:7], "default", "default inverted", "open collector", "open collector inverted" +;no TS info - skipping unusedAtOldBoardConfigurationEnd offset 988 vvtDisplayInverted = bits, U32, 1464, [0:0], "false", "true" fuelClosedLoopCorrectionEnabled= bits, U32, 1464, [1:1], "false", "true" isVerboseIAC = bits, U32, 1464, [2:2], "false", "true" @@ -535,9 +543,9 @@ page = 1 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" - 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" - 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" + hipOutputChannel = bits, U08, 1468, [0:7] "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" + acSwitchAdc = bits, U08, 1469, [0:7] "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" + vRefAdcChannel = bits, U08, 1470, [0:7] "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" 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" @@ -561,7 +569,7 @@ page = 1 useAdvanceCorrectionsForCranking= bits, U32, 1476, [18:18], "false", "true" useTPSAdvanceTable = bits, U32, 1476, [19:19], "false", "true" etbCalibrationOnStart = bits, U32, 1476, [20:20], "false", "true" - unused_1484_bit_21 = bits, U32, 1476, [21:21], "false", "true" + useIacPidMultTable = bits, U32, 1476, [21:21], "false", "true" unused_1484_bit_22 = bits, U32, 1476, [22:22], "false", "true" unused_1484_bit_23 = bits, U32, 1476, [23:23], "false", "true" unused_1484_bit_24 = bits, U32, 1476, [24:24], "false", "true" @@ -628,7 +636,9 @@ page = 1 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 -;no TS info - skipping unusedFormerWarmupAfrPid offset 1768 + tps2Min = scalar, S16, 1768, "ADC", 1, 0, 0, 1023, 0 + tps2Max = scalar, S16, 1770, "ADC", 1, 0, 0, 1023, 0 +;no TS info - skipping unusedFormerWarmupAfrPid offset 1772 mapErrorDetectionTooLow = scalar, F32, 1776, "kPa", 1, 0, -100.0, 100.0, 2 mapErrorDetectionTooHigh = scalar, F32, 1780, "kPa", 1, 0, -100.0, 800.0, 2 step1RpmWindow = scalar, S32, 1784, "rpm", 1, 0, 0, 3000.0, 2 @@ -677,15 +687,15 @@ page = 1 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", "Trigger Sync", "Electronic Throttle", "Executor", "Bench Test / TS commands", "Aux Valves", "Analog inputs #1", "INSTANT_RPM", "FSIO_EXPRESSION", "Status", "CJ125", "CAN", "MAP", "Metrics", "ETB#2", "Ion Sense", "TLE8888", "Analog inputs #2", "Dwell Metric", "Aux Temperature", "ETB Logic" + debugMode = bits, U32, 2092, [0:7], "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", "Trigger Sync", "Electronic Throttle", "Executor", "Bench Test / TS commands", "Aux Valves", "Analog inputs #1", "INSTANT_RPM", "FSIO_EXPRESSION", "Status", "CJ125", "CAN", "MAP", "Metrics", "ETB#2", "Ion Sense", "TLE8888", "Analog inputs #2", "Dwell Metric", "Aux Temperature", "ETB Logic" ;no TS info - skipping unused_former_warmup_target_afr offset 2096 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" - 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" - 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" - 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" + fsioAdc1 = bits, U08, 2200, [0:7] "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" + fsioAdc2 = bits, U08, 2201, [0:7] "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" + fsioAdc3 = bits, U08, 2202, [0:7] "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" + fsioAdc4 = bits, U08, 2203, [0:7] "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" 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 @@ -694,10 +704,10 @@ page = 1 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" 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" 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" - cj125SpiDevice = bits,U32, 2224, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4" - cj125CsPinMode = bits, U08, 2225, [0:1], "default", "default inverted", "open collector", "open collector inverted" + cj125SpiDevice = bits,U32, 2224, [0:7], "Off", "SPI1", "SPI2", "SPI3", "SPI4" + cj125CsPinMode = bits, U08, 2225, [0:7], "default", "default inverted", "open collector", "open collector inverted" dizzySparkOutputPin = bits, U08, 2226, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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" + dizzySparkOutputPinMode = bits, U08, 2227, [0:7], "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 @@ -708,10 +718,10 @@ page = 1 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" + storageMode = bits, U32, 2260, [0:7], "Auto", "Always", "Never" 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], "First half", "Second half", "2GZ", "Miata NB2", "mode4", "mode5", "mode6", "mode7" + vvtMode = bits, U32, 2328, [0:7], "First half", "Second half", "2GZ", "Miata NB2", "mode4", "mode5", "mode6", "mode7" biQuad_a0 = scalar, F32, 2332, "v", 1, 0, -1000, 1000, 9 biQuad_a1 = scalar, F32, 2336, "v", 1, 0, -1000, 1000, 9 biQuad_a2 = scalar, F32, 2340, "v", 1, 0, -1000, 1000, 9 @@ -733,7 +743,7 @@ page = 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" + auxTempSensor1_adcChannel = bits, U08, 2472, [0:7] "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" ;no TS info - skipping auxTempSensor1_alignmentFill offset 2473 auxTempSensor2_tempC_1 = scalar, F32, 2476, "*C", 1, 0, -40, 200, 1 auxTempSensor2_tempC_2 = scalar, F32, 2480, "*C", 1, 0, -40, 200, 1 @@ -742,7 +752,7 @@ page = 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" + auxTempSensor2_adcChannel = bits, U08, 2504, [0:7] "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" ;no TS info - skipping auxTempSensor2_alignmentFill offset 2505 fuelClosedLoopCltThreshold = scalar, S16, 2508, "C", 1, 0, 0, 100, 0 fuelClosedLoopTpsThreshold = scalar, S16, 2510, "%", 1, 0, 0, 100, 0 @@ -769,23 +779,23 @@ page = 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" + sdCardSpiDevice = bits,U32, 2592, [0:7], "Off", "SPI1", "SPI2", "SPI3", "SPI4" ;no TS info - skipping unusedSpiPadding4 offset 2593 - 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" - 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" - 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" - 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" - 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" - 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" - 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" - 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" - 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" - stepperEnablePinMode = bits, U08, 2605, [0:1], "default", "default inverted", "open collector", "open collector inverted" + spi1SckMode = bits, U08, 2596, [0:7], "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" + spi1MosiMode = bits, U08, 2597, [0:7], "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" + spi1MisoMode = bits, U08, 2598, [0:7], "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" + spi2SckMode = bits, U08, 2599, [0:7], "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" + spi2MosiMode = bits, U08, 2600, [0:7], "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" + spi2MisoMode = bits, U08, 2601, [0:7], "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" + spi3SckMode = bits, U08, 2602, [0:7], "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" + spi3MosiMode = bits, U08, 2603, [0:7], "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" + spi3MisoMode = bits, U08, 2604, [0:7], "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" + stepperEnablePinMode = bits, U08, 2605, [0:7], "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" 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" 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" - 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" - 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" + cj125ua = bits, U08, 2609, [0:7] "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" + cj125ur = bits, U08, 2610, [0:7] "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" 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 @@ -815,13 +825,13 @@ page = 1 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" + oilPressure_hwChannel = bits, U08, 2692, [0:7] "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" ;no TS info - skipping oilPressure_align offset 2693 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" + accelerometerSpiDevice = bits,U32, 2712, [0:7], "Off", "SPI1", "SPI2", "SPI3", "SPI4" ;no TS info - skipping unusedSpiPadding5 offset 2713 fsioCurve1Bins = array, F32, 2716, [16], "x", 1, 0, -999, 1000.0, 3 fsioCurve1 = array, F32, 2780, [16], "y", 1, 0, -999, 1000.0, 3 @@ -833,11 +843,11 @@ page = 1 fsioCurve4 = array, F32, 3068, [8], "y", 1, 0, -999, 1000.0, 3 ;no TS info - skipping unusedFlexFuelSensor offset 3100 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" - 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" + stepperDirectionPinMode = bits, U08, 3102, [0:7], "default", "default inverted", "open collector", "open collector inverted" + externalKnockSenseAdc = bits, U08, 3103, [0:7] "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" stepperEnablePin = bits, U08, 3104, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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" - tle8888_csPinMode = bits, U08, 3106, [0:1], "default", "default inverted", "open collector", "open collector inverted" + tle8888_csPinMode = bits, U08, 3106, [0:7], "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" crankingAdvanceBins = array, F32, 3108, [4], "RPM", 1, 0, 0.0, 18000, 2 crankingAdvance = array, F32, 3124, [4], "deg", 1, 0, -20, 90, 2 @@ -871,10 +881,7 @@ page = 1 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 - etb2_directionPin1 = bits, U08, 3964, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etb2_directionPin2 = bits, U08, 3965, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etb2_controlPin1 = bits, U08, 3966, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etb2_controlPinMode = bits, U08, 3967, [0:1], "default", "default inverted", "open collector", "open collector inverted" +;no TS info - skipping unused1059 offset 3964 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 @@ -887,19 +894,22 @@ page = 1 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" - mc33816spiDevice = bits,U32, 4001, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4" + tle8888spiDevice = bits,U32, 4000, [0:7], "Off", "SPI1", "SPI2", "SPI3", "SPI4" + mc33816spiDevice = bits,U32, 4001, [0:7], "Off", "SPI1", "SPI2", "SPI3", "SPI4" idlerpmpid_iTermMin = scalar, S16, 4002, "", 1, 0, -30000, 30000.0, 0 - tle6240spiDevice = bits,U32, 4004, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4" + tle6240spiDevice = bits,U32, 4004, [0:7], "Off", "SPI1", "SPI2", "SPI3", "SPI4" ;no TS info - skipping unusedSpiPadding7 offset 4005 idlerpmpid_iTermMax = scalar, S16, 4006, "", 1, 0, -30000, 30000.0, 0 - mc33972spiDevice = bits,U32, 4008, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4" + mc33972spiDevice = bits,U32, 4008, [0:7], "Off", "SPI1", "SPI2", "SPI3", "SPI4" ;no TS info - skipping unusedSpiPadding8 offset 4009 etbIdleThrottleRange = scalar, F32, 4012, "%", 1, 0, 0, 15, 0 ;no TS info - skipping unusuedvref offset 4016 ;no TS info - skipping unusuedsw offset 4020 ;no TS info - skipping alFIn offset 4024 -;no TS info - skipping unusedSpiPadding3 offset 4036 + 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 @@ -1061,6 +1071,7 @@ page = 1 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" idlePidRpmUpperLimit = "Relative to the target idle RPM" 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." @@ -1097,6 +1108,10 @@ page = 1 idlePidFalloffDeltaRpm = "Taper out idle timing control over this range as the engine leaves idle conditions" tpsAccelFractionPeriod = "A delay in cycles between fuel-enrich. portions" tpsAccelFractionDivisor = "A fraction divisor: 1 or less = entire portion at once, or split into diminishing fractions" + triggerCompCenterVolt = "Trigger comparator center point voltage" + triggerCompHystMin = "Trigger comparator hysteresis voltage (Min)" + triggerCompHystMax = "Trigger comparator hysteresis voltage (Max)" + triggerCompSensorSatRpm = "VR-sensor saturation RPM" ; CONFIG_DEFINITION_END @@ -1748,6 +1763,15 @@ fileVersion = { 20190701 } 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, engineLoad + zBins = iacPidMultTable +; gridHeight = 2.0 + gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. + upDownLabel = "(Later)", "(Sooner)" + [GaugeConfigurations] gaugeCategory = Sensors - Extra 2 @@ -2095,6 +2119,7 @@ menuDialog = main # Digital outputs subMenu = mainRelay, "Main relay" + subMenu = starterRelay, "Starter relay" subMenu = fuelPump, "Fuel rail" subMenu = fanSetting, "Fan" subMenu = tachSettings, "Tachometer" @@ -2167,6 +2192,8 @@ menuDialog = main 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 @@ -2585,6 +2612,12 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" 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 = triggerInputs, "Trigger Inputs" field = "!ECU reboot needed to apply these settings" field = "#Cam is primary if you have cam sensor" @@ -2593,6 +2626,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" 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 + panel = triggerInputComparator dialog = allPinsSensors, "Sensors" field = "CLT ADC input", clt_adcChannel @@ -2663,6 +2697,8 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Fan Pin Mode", fanPinMode field = "Main Relay Pin", mainRelayPin field = "Main Relay Mode", mainRelayPinMode + field = "Starter Relay Pin", starterRelayPin + field = "Starter Relay Mode", starterRelayPinMode field = "aux valve #1", auxValves1 field = "aux valve #2", auxValves2 @@ -2731,6 +2767,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Debug Trigger Sync", debugTriggerSync field = "Debug Timer Callback", debugTimerCallback field = "Debug Set Timer", debugSetTimer + field = "Aux Fast Analog", auxFastSensor1_adcChannel dialog = allPins1_3 field = "FSIO ADC #1", fsioAdc1 @@ -2953,6 +2990,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" 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 @@ -3006,6 +3044,10 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Pin", mainRelayPin field = "Pin mode", mainRelayPinMode + dialog = starterRelay, "Starter relay output" + field = "Pin", starterRelayPin + field = "Pin mode", starterRelayPinMode + dialog = statusLeds, "Status LEDs" field = "Running status LED", runningLedPin field = "TS communication status LED", communicationLedPin @@ -3175,7 +3217,9 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" ; Board->Connection dialog = tsPort, "TunerStudio Port" field = "tunerStudioSerialSpeed", tunerStudioSerialSpeed - field = "Use PC10/PC11 serial?", useSerialPort + field = "Use UART/TTL serial?", useSerialPort + field = "RX pin", binarySerialRxPin, {useSerialPort == 1} + field = "TX pin", binarySerialTxPin, {useSerialPort == 1} field = "uartConsoleSerialSpeed", uartConsoleSerialSpeed dialog = canBus, "CAN Bus" @@ -3218,7 +3262,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" commandButton = "Reinit", cmd_tle8888_init dialog = connection, "", yAxis - field = "STM32 vRef voltage", adcVcc + field = "ADC vRef voltage", adcVcc panel = tsPort panel = canBus panel = sdCard @@ -3479,16 +3523,17 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Pause ETB control", pauseEtbControl field = "Throttle Pedal Up", throttlePedalUpVoltage field = "Throttle Pedal Wide Open", throttlePedalWOTVoltage + field = "Two-wire mode", etb_use_two_wires, {throttlePedalPositionAdcChannel != 16} field = "PWM Frequency", etbFreq, {throttlePedalPositionAdcChannel != 16} field = etbCalibrationOnStart, etbCalibrationOnStart - field = "No1 Direction #1", etb1_directionPin1, {throttlePedalPositionAdcChannel != 16} - field = "No1 Direction #2", etb1_directionPin2, {throttlePedalPositionAdcChannel != 16} - field = "Two-wire mode", etb1_use_two_wires, {throttlePedalPositionAdcChannel != 16} - field = "No1 Control #1", etb1_controlPin1, {throttlePedalPositionAdcChannel != 16 && etb1_use_two_wires == 0} - field = "No2 Direction #1", etb2_directionPin1, {throttlePedalPositionAdcChannel != 16} - field = "No2 Direction #2", etb2_directionPin2, {throttlePedalPositionAdcChannel != 16} - field = "Two-wire mode", etb2_use_two_wires, {throttlePedalPositionAdcChannel != 16} - field = "No2 Control #1", etb2_controlPin1, {throttlePedalPositionAdcChannel != 16 && etb2_use_two_wires == 0} + field = "No1 Direction #1", etbIo1_directionPin1, {throttlePedalPositionAdcChannel != 16} + field = "No1 Direction #2", etbIo1_directionPin2, {throttlePedalPositionAdcChannel != 16} + field = "No1 Control #1", etbIo1_controlPin1, {throttlePedalPositionAdcChannel != 16 && etb_use_two_wires == 0} + field = "No2 Direction #1", etbIo2_directionPin1, {throttlePedalPositionAdcChannel != 16} + field = "No2 Direction #2", etbIo2_directionPin2, {throttlePedalPositionAdcChannel != 16} + field = "No2 Control #1", etb2_controlPin1, {throttlePedalPositionAdcChannel != 16 && etb_use_two_wires == 0} + field = "TPS#2 min", tps2Min, {etbIo2_directionPin1 != 0} + field = "TPS#2 max", tps2Max, {etbIo2_directionPin1 != 0} panel = etbPidDialog dialog = etbDialogRight diff --git a/firmware/tunerstudio/rusefi_kinetis.ini b/firmware/tunerstudio/rusefi_kinetis.ini index 0dfa2049d9..de38ec4432 100644 --- a/firmware/tunerstudio/rusefi_kinetis.ini +++ b/firmware/tunerstudio/rusefi_kinetis.ini @@ -85,11 +85,11 @@ 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 integration/rusefi_config.txt Tue Nov 19 09:22:43 EST 2019 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Sun Dec 08 00:34:54 EST 2019 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" + engineType = bits, S32, 0, [0:7], "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 @@ -106,8 +106,8 @@ page = 1 useBiQuadAnalogFiltering= bits, U32, 76, [9:9], "false", "true" cj125isUaDivided = bits, U32, 76, [10:10], "false", "true" cj125isLsu49 = bits, U32, 76, [11:11], "false", "true" - etb1_use_two_wires = bits, U32, 76, [12:12], "false", "true" - etb2_use_two_wires = bits, U32, 76, [13:13], "false", "true" + etb_use_two_wires = bits, U32, 76, [12:12], "false", "true" + unusedHereo_wires = bits, U32, 76, [13:13], "false", "true" showSdCardWarning = bits, U32, 76, [14:14], "false", "true" cj125isUrDivided = bits, U32, 76, [15:15], "false", "true" useTLE8888_hall_mode = bits, U32, 76, [16:16], "false", "true" @@ -141,8 +141,8 @@ page = 1 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", "INVALID" - map_sensor_hwChannel = bits, U08, 248, [0:4] "PA2", "PA3", "INVALID", "PD3", "INVALID", "INVALID", "INVALID", "PB12", "PB13", "INVALID", "PE2", "INVALID", "PC14", "PC15", "PC16", "PC17", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + map_sensor_type = bits, U32, 244, [0:7] "Custom", "DENSO183", "MPX4250", "HONDA3BAR", "NEON_2003", "22012AA090", "3 Bar", "MPX4100", "Toyota 89420-02010", "MPX4250A", "INVALID" + map_sensor_hwChannel = bits, U08, 248, [0:7] "PA2", "PA3", "INVALID", "PD3", "INVALID", "INVALID", "INVALID", "PB12", "PB13", "INVALID", "PE2", "INVALID", "PC14", "PC15", "PC16", "PC17", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ;no TS info - skipping map_sensor_align offset 249 clt_tempC_1 = scalar, F32, 252, "*C", 1, 0, -40, 200, 1 clt_tempC_2 = scalar, F32, 256, "*C", 1, 0, -40, 200, 1 @@ -151,7 +151,7 @@ page = 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] "PA2", "PA3", "INVALID", "PD3", "INVALID", "INVALID", "INVALID", "PB12", "PB13", "INVALID", "PE2", "INVALID", "PC14", "PC15", "PC16", "PC17", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + clt_adcChannel = bits, U08, 280, [0:7] "PA2", "PA3", "INVALID", "PD3", "INVALID", "INVALID", "INVALID", "PB12", "PB13", "INVALID", "PE2", "INVALID", "PC14", "PC15", "PC16", "PC17", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ;no TS info - skipping clt_alignmentFill offset 281 iat_tempC_1 = scalar, F32, 284, "*C", 1, 0, -40, 200, 1 iat_tempC_2 = scalar, F32, 288, "*C", 1, 0, -40, 200, 1 @@ -160,7 +160,7 @@ page = 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] "PA2", "PA3", "INVALID", "PD3", "INVALID", "INVALID", "INVALID", "PB12", "PB13", "INVALID", "PE2", "INVALID", "PC14", "PC15", "PC16", "PC17", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + iat_adcChannel = bits, U08, 312, [0:7] "PA2", "PA3", "INVALID", "PD3", "INVALID", "INVALID", "INVALID", "PB12", "PB13", "INVALID", "PE2", "INVALID", "PC14", "PC15", "PC16", "PC17", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ;no TS info - skipping iat_alignmentFill offset 313 step1rpm = scalar, S32, 316, "rpm", 1, 0, 0, 20000.0, 2 step1timing = scalar, S32, 320, "deg", 1, 0, -180, 180, 2 @@ -169,17 +169,17 @@ page = 1 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", "fo20", "fo21", "fo22", "INVALID" + cylindersCount = bits, U32, 400, [0:7], "INVALID", 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, "INVALID", "INVALID", "INVALID" + firingOrder = bits, U32, 404, [0:7], "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", "fo20", "fo21", "fo22", "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", "MAP", "SPEED DENSITY", "MAF Air Charge" - crankingInjectionMode = bits, U32, 424, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" - injectionMode = bits, U32, 428, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" + fuelAlgorithm = bits, U32, 420, [0:7], "MAF", "Alpha-N/TPS", "MAP", "SPEED DENSITY", "MAF Air Charge" + crankingInjectionMode = bits, U32, 424, [0:7], "Simultaneous", "Sequential", "Batch", "Single Point" + injectionMode = bits, U32, 428, [0:7], "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:7], "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 @@ -189,57 +189,57 @@ page = 1 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:1], "BMW", "FIAT", "VAG" , "MAZDA RX8" + canNbcType = bits, U32, 480, [0:7], "BMW", "FIAT", "VAG" , "MAZDA RX8" 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" + ambiguousOperationMode = bits, U32, 488, [0:7], "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:7], "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] "PA2", "PA3", "INVALID", "PD3", "INVALID", "INVALID", "INVALID", "PB12", "PB13", "INVALID", "PE2", "INVALID", "PC14", "PC15", "PC16", "PC17", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - vbattAdcChannel = bits, U08, 513, [0:4] "PA2", "PA3", "INVALID", "PD3", "INVALID", "INVALID", "INVALID", "PB12", "PB13", "INVALID", "PE2", "INVALID", "PC14", "PC15", "PC16", "PC17", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fuelLevelSensor = bits, U08, 514, [0:4] "PA2", "PA3", "INVALID", "PD3", "INVALID", "INVALID", "INVALID", "PB12", "PB13", "INVALID", "PE2", "INVALID", "PC14", "PC15", "PC16", "PC17", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tps2_1AdcChannel = bits, U08, 515, [0:4] "PA2", "PA3", "INVALID", "PD3", "INVALID", "INVALID", "INVALID", "PB12", "PB13", "INVALID", "PE2", "INVALID", "PC14", "PC15", "PC16", "PC17", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + tps1_1AdcChannel = bits, U08, 512, [0:7] "PA2", "PA3", "INVALID", "PD3", "INVALID", "INVALID", "INVALID", "PB12", "PB13", "INVALID", "PE2", "INVALID", "PC14", "PC15", "PC16", "PC17", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + vbattAdcChannel = bits, U08, 513, [0:7] "PA2", "PA3", "INVALID", "PD3", "INVALID", "INVALID", "INVALID", "PB12", "PB13", "INVALID", "PE2", "INVALID", "PC14", "PC15", "PC16", "PC17", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + fuelLevelSensor = bits, U08, 514, [0:7] "PA2", "PA3", "INVALID", "PD3", "INVALID", "INVALID", "INVALID", "PB12", "PB13", "INVALID", "PE2", "INVALID", "PC14", "PC15", "PC16", "PC17", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + tps2_1AdcChannel = bits, U08, 515, [0:7] "PA2", "PA3", "INVALID", "PD3", "INVALID", "INVALID", "INVALID", "PB12", "PB13", "INVALID", "PE2", "INVALID", "PC14", "PC15", "PC16", "PC17", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ;no TS info - skipping overrideCrankingIgnition offset 516 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", "2JZ", "Rover K", "GM LS 24", "Honda CBR 600", "2JZ_1_12", "Honda CBR 600 custom", "3/1 skipped" , "Dodge Neon 2003 crank", "Miata VVT", "trg34", "trg35", "Subaru 7+6", "Jeep 18-2-2-2", "WIP", "Dodge Neon 1995 crank only", "Jeep XJ 4 cyl", "FiatIAQ_P8", "Mazda Z5", "trg43", "trg44", "trg45", "INVALID" + trigger_type = bits, U32, 524, [0:7], "custom toothed wheel", "Ford Aspire", "Dodge Neon 1995", "Miata NA", "Miata NB", "GM_7X", "Cooper R50", "Mazda SOHC 4", "60/2", "36/1", "Honda 4+24+1", "Mitsubishi", "Honda 4+24", "Honda 1+4+24", "Dodge Neon 2003", "Mazda DOHC 1+4", "1+1", "1+60/2", "Single Tooth", "Dodge Ram 1+16", "60/2 VW", "Honda 1+24", "Dodge Stratus", "36_2_2_2", "Nissan Primera", "2JZ", "Rover K", "GM LS 24", "Honda CBR 600", "2JZ_1_12", "Honda CBR 600 custom", "3/1 skipped" , "Dodge Neon 2003 crank", "Miata VVT", "trg34", "trg35", "Subaru 7+6", "Jeep 18-2-2-2", "WIP", "Dodge Neon 1995 crank only", "Jeep XJ 4 cyl", "FiatIAQ_P8", "Mazda Z5", "trg43", "trg44", "trg45", "INVALID" trigger_unusedCustomIsSynchronizationNeeded= bits, U32, 528, [0:0], "false", "true" trigger_unusedCustomNeedSecondTriggerInput= bits, U32, 528, [1:1], "false", "true" trigger_useOnlyFirstChannel= bits, U32, 528, [2:2], "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" - high_fuel_pressure_sensor_1 = bits, U08, 541, [0:4] "PA2", "PA3", "INVALID", "PD3", "INVALID", "INVALID", "INVALID", "PB12", "PB13", "INVALID", "PE2", "INVALID", "PC14", "PC15", "PC16", "PC17", "Disabled", "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] "PA2", "PA3", "INVALID", "PD3", "INVALID", "INVALID", "INVALID", "PB12", "PB13", "INVALID", "PE2", "INVALID", "PC14", "PC15", "PC16", "PC17", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - mafAdcChannel = bits, U08, 543, [0:4] "PA2", "PA3", "INVALID", "PD3", "INVALID", "INVALID", "INVALID", "PB12", "PB13", "INVALID", "PE2", "INVALID", "PC14", "PC15", "PC16", "PC17", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + hip9011SpiDevice = bits,U32, 540, [0:7], "Off", "SPI1", "SPI2", "SPI3", "SPI4" + high_fuel_pressure_sensor_1 = bits, U08, 541, [0:7] "PA2", "PA3", "INVALID", "PD3", "INVALID", "INVALID", "INVALID", "PB12", "PB13", "INVALID", "PE2", "INVALID", "PC14", "PC15", "PC16", "PC17", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + high_fuel_pressure_sensor_2 = bits, U08, 542, [0:7] "PA2", "PA3", "INVALID", "PD3", "INVALID", "INVALID", "INVALID", "PB12", "PB13", "INVALID", "PE2", "INVALID", "PC14", "PC15", "PC16", "PC17", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + mafAdcChannel = bits, U08, 543, [0:7] "PA2", "PA3", "INVALID", "PD3", "INVALID", "INVALID", "INVALID", "PB12", "PB13", "INVALID", "PE2", "INVALID", "PC14", "PC15", "PC16", "PC17", "Disabled", "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, 4.0, 3 + adcVcc = scalar, F32, 548, "volts", 1, 0.0, 0, 6.0, 3 ;no TS info - skipping maxKnockSubDeg offset 552 camInputs1 = bits, U08, 556, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "N/A", "N/A", "PA10", "PA11", "PA12", "PA13", "N/A", "N/A", "N/A", "N/A", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "N/A", "N/A", "N/A", "N/A", "PB12", "PB13", "N/A", "N/A", "N/A", "N/A", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "N/A", "N/A", "N/A", "N/A", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "PD15", "PD16", "N/A", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A" camInputs2 = bits, U08, 557, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "N/A", "N/A", "PA10", "PA11", "PA12", "PA13", "N/A", "N/A", "N/A", "N/A", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "N/A", "N/A", "N/A", "N/A", "PB12", "PB13", "N/A", "N/A", "N/A", "N/A", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "N/A", "N/A", "N/A", "N/A", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "PD15", "PD16", "N/A", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A" camInputs3 = bits, U08, 558, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "N/A", "N/A", "PA10", "PA11", "PA12", "PA13", "N/A", "N/A", "N/A", "N/A", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "N/A", "N/A", "N/A", "N/A", "PB12", "PB13", "N/A", "N/A", "N/A", "N/A", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "N/A", "N/A", "N/A", "N/A", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "PD15", "PD16", "N/A", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A" camInputs4 = bits, U08, 559, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "N/A", "N/A", "PA10", "PA11", "PA12", "PA13", "N/A", "N/A", "N/A", "N/A", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "N/A", "N/A", "N/A", "N/A", "PB12", "PB13", "N/A", "N/A", "N/A", "N/A", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "N/A", "N/A", "N/A", "N/A", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "PD15", "PD16", "N/A", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A" - afr_hwChannel = bits, U08, 560, [0:4] "PA2", "PA3", "INVALID", "PD3", "INVALID", "INVALID", "INVALID", "PB12", "PB13", "INVALID", "PE2", "INVALID", "PC14", "PC15", "PC16", "PC17", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + afr_hwChannel = bits, U08, 560, [0:7] "PA2", "PA3", "INVALID", "PD3", "INVALID", "INVALID", "INVALID", "PB12", "PB13", "INVALID", "PE2", "INVALID", "PC14", "PC15", "PC16", "PC17", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ;no TS info - skipping afr_alignAf offset 561 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] "PA2", "PA3", "INVALID", "PD3", "INVALID", "INVALID", "INVALID", "PB12", "PB13", "INVALID", "PE2", "INVALID", "PC14", "PC15", "PC16", "PC17", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + throttlePedalPositionAdcChannel = bits, U08, 580, [0:7] "PA2", "PA3", "INVALID", "PD3", "INVALID", "INVALID", "INVALID", "PB12", "PB13", "INVALID", "PE2", "INVALID", "PC14", "PC15", "PC16", "PC17", "Disabled", "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", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" - tle6240_csPinMode = bits, U08, 582, [0:1], "default", "default inverted", "open collector", "open collector inverted" + tle6240_csPinMode = bits, U08, 582, [0:7], "default", "default inverted", "open collector", "open collector inverted" throttlePedalUpPin = bits, U08, 583, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "N/A", "N/A", "PA10", "PA11", "PA12", "PA13", "N/A", "N/A", "N/A", "N/A", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "N/A", "N/A", "N/A", "N/A", "PB12", "PB13", "N/A", "N/A", "N/A", "N/A", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "N/A", "N/A", "N/A", "N/A", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "PD15", "PD16", "N/A", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A" 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", "INVALID" - baroSensor_hwChannel = bits, U08, 596, [0:4] "PA2", "PA3", "INVALID", "PD3", "INVALID", "INVALID", "INVALID", "PB12", "PB13", "INVALID", "PE2", "INVALID", "PC14", "PC15", "PC16", "PC17", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + baroSensor_type = bits, U32, 592, [0:7] "Custom", "DENSO183", "MPX4250", "HONDA3BAR", "NEON_2003", "22012AA090", "3 Bar", "MPX4100", "Toyota 89420-02010", "MPX4250A", "INVALID" + baroSensor_hwChannel = bits, U08, 596, [0:7] "PA2", "PA3", "INVALID", "PD3", "INVALID", "INVALID", "INVALID", "PB12", "PB13", "INVALID", "PE2", "INVALID", "PC14", "PC15", "PC16", "PC17", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ;no TS info - skipping baroSensor_align offset 597 idle_solenoidFrequency = scalar, S32, 600, "Hz", 1, 0, 0, 3000, 0 idle_solenoidPin = bits, U08, 604, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" idle_stepperDirectionPin = bits, U08, 605, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" idle_stepperStepPin = bits, U08, 606, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" - idle_solenoidPinMode = bits, U08, 607, [0:1], "default", "default inverted", "open collector", "open collector inverted" + idle_solenoidPinMode = bits, U08, 607, [0:7], "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 @@ -268,8 +268,8 @@ page = 1 ignitionPins10 = bits, U08, 645, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "N/A", "N/A", "PA10", "PA11", "PA12", "PA13", "N/A", "N/A", "N/A", "N/A", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "N/A", "N/A", "N/A", "N/A", "PB12", "PB13", "N/A", "N/A", "N/A", "N/A", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "N/A", "N/A", "N/A", "N/A", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "PD15", "PD16", "N/A", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" ignitionPins11 = bits, U08, 646, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "N/A", "N/A", "PA10", "PA11", "PA12", "PA13", "N/A", "N/A", "N/A", "N/A", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "N/A", "N/A", "N/A", "N/A", "PB12", "PB13", "N/A", "N/A", "N/A", "N/A", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "N/A", "N/A", "N/A", "N/A", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "PD15", "PD16", "N/A", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" ignitionPins12 = bits, U08, 647, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "N/A", "N/A", "PA10", "PA11", "PA12", "PA13", "N/A", "N/A", "N/A", "N/A", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "N/A", "N/A", "N/A", "N/A", "PB12", "PB13", "N/A", "N/A", "N/A", "N/A", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "N/A", "N/A", "N/A", "N/A", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "PD15", "PD16", "N/A", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" - 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" + injectionPinMode = bits, U08, 648, [0:7], "default", "default inverted", "open collector", "open collector inverted" + ignitionPinMode = bits, U08, 649, [0:7], "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", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" 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", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" 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", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" @@ -279,41 +279,39 @@ page = 1 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", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" 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", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" fuelPumpPin = bits, U08, 658, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "N/A", "N/A", "PA10", "PA11", "PA12", "PA13", "N/A", "N/A", "N/A", "N/A", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "N/A", "N/A", "N/A", "N/A", "PB12", "PB13", "N/A", "N/A", "N/A", "N/A", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "N/A", "N/A", "N/A", "N/A", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "PD15", "PD16", "N/A", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" - fuelPumpPinMode = bits, U08, 659, [0:1], "default", "default inverted", "open collector", "open collector inverted" + fuelPumpPinMode = bits, U08, 659, [0:7], "default", "default inverted", "open collector", "open collector inverted" malfunctionIndicatorPin = bits, U08, 660, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "N/A", "N/A", "PA10", "PA11", "PA12", "PA13", "N/A", "N/A", "N/A", "N/A", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "N/A", "N/A", "N/A", "N/A", "PB12", "PB13", "N/A", "N/A", "N/A", "N/A", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "N/A", "N/A", "N/A", "N/A", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "PD15", "PD16", "N/A", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" - 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" + malfunctionIndicatorPinMode = bits, U08, 661, [0:7], "default", "default inverted", "open collector", "open collector inverted" + fanPinMode = bits, U08, 662, [0:7], "default", "default inverted", "open collector", "open collector inverted" fanPin = bits, U08, 663, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "N/A", "N/A", "PA10", "PA11", "PA12", "PA13", "N/A", "N/A", "N/A", "N/A", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "N/A", "N/A", "N/A", "N/A", "PB12", "PB13", "N/A", "N/A", "N/A", "N/A", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "N/A", "N/A", "N/A", "N/A", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "PD15", "PD16", "N/A", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" clutchDownPin = bits, U08, 664, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "N/A", "N/A", "PA10", "PA11", "PA12", "PA13", "N/A", "N/A", "N/A", "N/A", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "N/A", "N/A", "N/A", "N/A", "PB12", "PB13", "N/A", "N/A", "N/A", "N/A", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "N/A", "N/A", "N/A", "N/A", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "PD15", "PD16", "N/A", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A" alternatorControlPin = bits, U08, 665, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "N/A", "N/A", "PA10", "PA11", "PA12", "PA13", "N/A", "N/A", "N/A", "N/A", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "N/A", "N/A", "N/A", "N/A", "PB12", "PB13", "N/A", "N/A", "N/A", "N/A", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "N/A", "N/A", "N/A", "N/A", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "PD15", "PD16", "N/A", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" - alternatorControlPinMode = bits, U08, 666, [0:1], "default", "default inverted", "open collector", "open collector inverted" + alternatorControlPinMode = bits, U08, 666, [0:7], "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", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" digitalPotentiometerChipSelect2 = bits, U08, 669, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" digitalPotentiometerChipSelect3 = bits, U08, 670, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" digitalPotentiometerChipSelect4 = bits, U08, 671, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" - electronicThrottlePin1Mode = bits, U08, 672, [0:1], "default", "default inverted", "open collector", "open collector inverted" + electronicThrottlePin1Mode = bits, U08, 672, [0:7], "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", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" cj125CsPin = bits, U08, 674, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" - max31855spiDevice = bits,U32, 675, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4" + max31855spiDevice = bits,U32, 675, [0:7], "Off", "SPI1", "SPI2", "SPI3", "SPI4" debugTriggerSync = bits, U08, 676, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" - digitalPotentiometerSpiDevice = bits,U32, 677, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4" + digitalPotentiometerSpiDevice = bits,U32, 677, [0:7], "Off", "SPI1", "SPI2", "SPI3", "SPI4" 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", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" - mc33972_csPinMode = bits, U08, 679, [0:1], "default", "default inverted", "open collector", "open collector inverted" - etb1_directionPin1 = bits, U08, 680, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" - etb1_directionPin2 = bits, U08, 681, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" - etb1_controlPin1 = bits, U08, 682, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" - etb1_controlPinMode = bits, U08, 683, [0:1], "default", "default inverted", "open collector", "open collector inverted" + mc33972_csPinMode = bits, U08, 679, [0:7], "default", "default inverted", "open collector", "open collector inverted" + auxFastSensor1_adcChannel = bits, U08, 680, [0:7] "PA2", "PA3", "INVALID", "PD3", "INVALID", "INVALID", "INVALID", "PB12", "PB13", "INVALID", "PE2", "INVALID", "PC14", "PC15", "PC16", "PC17", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" +;no TS info - skipping unused556 offset 681 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" + afr_type = bits, S32, 692, [0:7], "BPSX", "Innovate", "14Point7", "Narrow", "PLX", "Custom" fuelClosedLoopAfrLowThreshold = scalar, F32, 696, "ratio", 1, 0, 0, 100, 1 triggerInputPins1 = bits, U08, 700, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "N/A", "N/A", "PA10", "PA11", "PA12", "PA13", "N/A", "N/A", "N/A", "N/A", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "N/A", "N/A", "N/A", "N/A", "PB12", "PB13", "N/A", "N/A", "N/A", "N/A", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "N/A", "N/A", "N/A", "N/A", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "PD15", "PD16", "N/A", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A" triggerInputPins2 = bits, U08, 701, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "N/A", "N/A", "PA10", "PA11", "PA12", "PA13", "N/A", "N/A", "N/A", "N/A", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "N/A", "N/A", "N/A", "N/A", "PB12", "PB13", "N/A", "N/A", "N/A", "N/A", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "N/A", "N/A", "N/A", "N/A", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "PD15", "PD16", "N/A", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A" triggerInputPins3 = bits, U08, 702, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "N/A", "N/A", "PA10", "PA11", "PA12", "PA13", "N/A", "N/A", "N/A", "N/A", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "N/A", "N/A", "N/A", "N/A", "PB12", "PB13", "N/A", "N/A", "N/A", "N/A", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "N/A", "N/A", "N/A", "N/A", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "PD15", "PD16", "N/A", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A" - hip9011CsPinMode = bits, U08, 703, [0:1], "default", "default inverted", "open collector", "open collector inverted" + hip9011CsPinMode = bits, U08, 703, [0:7], "default", "default inverted", "open collector", "open collector inverted" tachOutputPin = bits, U08, 704, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "N/A", "N/A", "PA10", "PA11", "PA12", "PA13", "N/A", "N/A", "N/A", "N/A", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "N/A", "N/A", "N/A", "N/A", "PB12", "PB13", "N/A", "N/A", "N/A", "N/A", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "N/A", "N/A", "N/A", "N/A", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "PD15", "PD16", "N/A", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" - tachOutputPinMode = bits, U08, 705, [0:1], "default", "default inverted", "open collector", "open collector inverted" + tachOutputPinMode = bits, U08, 705, [0:7], "default", "default inverted", "open collector", "open collector inverted" mainRelayPin = bits, U08, 706, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "N/A", "N/A", "PA10", "PA11", "PA12", "PA13", "N/A", "N/A", "N/A", "N/A", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "N/A", "N/A", "N/A", "N/A", "PB12", "PB13", "N/A", "N/A", "N/A", "N/A", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "N/A", "N/A", "N/A", "N/A", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "PD15", "PD16", "N/A", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" sdCardCsPin = bits, U08, 707, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" canTxPin = bits, U08, 708, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" @@ -325,15 +323,15 @@ page = 1 ;no TS info - skipping lcdThreadPeriodMs offset 720 ;no TS info - skipping generalPeriodicThreadPeriodMs offset 724 tunerStudioSerialSpeed = scalar, U32, 728, "BPs", 1, 0, 0,1000000, 0 - canDeviceMode = bits, U32, 732, [0:2], "v0", "v1" + canDeviceMode = bits, U32, 732, [0:7], "v0", "v1" triggerSimulatorPins1 = bits, U08, 736, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" triggerSimulatorPins2 = bits, U08, 737, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" triggerSimulatorPins3 = bits, U08, 738, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" - 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" + triggerSimulatorPinModes1 = bits, U08, 739, [0:7], "default", "default inverted", "open collector", "open collector inverted" + triggerSimulatorPinModes2 = bits, U08, 740, [0:7], "default", "default inverted", "open collector", "open collector inverted" + triggerSimulatorPinModes3 = bits, U08, 741, [0:7], "default", "default inverted", "open collector", "open collector inverted" o2heaterPin = bits, U08, 742, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "N/A", "N/A", "PA10", "PA11", "PA12", "PA13", "N/A", "N/A", "N/A", "N/A", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "N/A", "N/A", "N/A", "N/A", "PB12", "PB13", "N/A", "N/A", "N/A", "N/A", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "N/A", "N/A", "N/A", "N/A", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "PD15", "PD16", "N/A", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" - o2heaterPinModeTodO = bits, U08, 743, [0:1], "default", "default inverted", "open collector", "open collector inverted" + o2heaterPinModeTodO = bits, U08, 743, [0:7], "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" @@ -370,28 +368,28 @@ page = 1 logicAnalyzerPins2 = bits, U08, 749, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "N/A", "N/A", "PA10", "PA11", "PA12", "PA13", "N/A", "N/A", "N/A", "N/A", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "N/A", "N/A", "N/A", "N/A", "PB12", "PB13", "N/A", "N/A", "N/A", "N/A", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "N/A", "N/A", "N/A", "N/A", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "PD15", "PD16", "N/A", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A" logicAnalyzerPins3 = bits, U08, 750, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "N/A", "N/A", "PA10", "PA11", "PA12", "PA13", "N/A", "N/A", "N/A", "N/A", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "N/A", "N/A", "N/A", "N/A", "PB12", "PB13", "N/A", "N/A", "N/A", "N/A", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "N/A", "N/A", "N/A", "N/A", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "PD15", "PD16", "N/A", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A" logicAnalyzerPins4 = bits, U08, 751, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "N/A", "N/A", "PA10", "PA11", "PA12", "PA13", "N/A", "N/A", "N/A", "N/A", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "N/A", "N/A", "N/A", "N/A", "PB12", "PB13", "N/A", "N/A", "N/A", "N/A", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "N/A", "N/A", "N/A", "N/A", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "PD15", "PD16", "N/A", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A" - mainRelayPinMode = bits, U08, 752, [0:1], "default", "default inverted", "open collector", "open collector inverted" + mainRelayPinMode = bits, U08, 752, [0:7], "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", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" hip9011IntHoldPin = bits, U08, 754, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" - hip9011IntHoldPinMode = bits, U08, 755, [0:1], "default", "default inverted", "open collector", "open collector inverted" + hip9011IntHoldPinMode = bits, U08, 755, [0:7], "default", "default inverted", "open collector", "open collector inverted" ;no TS info - skipping logicAnalyzerMode offset 756 ;no TS info - skipping unrealisticRpmThreashold offset 760 - 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" + gpioPinModes1 = bits, U08, 764, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes2 = bits, U08, 765, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes3 = bits, U08, 766, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes4 = bits, U08, 767, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes5 = bits, U08, 768, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes6 = bits, U08, 769, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes7 = bits, U08, 770, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes8 = bits, U08, 771, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes9 = bits, U08, 772, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes10 = bits, U08, 773, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes11 = bits, U08, 774, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes12 = bits, U08, 775, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes13 = bits, U08, 776, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes14 = bits, U08, 777, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes15 = bits, U08, 778, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes16 = bits, U08, 779, [0:7], "default", "default inverted", "open collector", "open collector inverted" fsioOutputPins1 = bits, U08, 780, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "N/A", "N/A", "PA10", "PA11", "PA12", "PA13", "N/A", "N/A", "N/A", "N/A", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "N/A", "N/A", "N/A", "N/A", "PB12", "PB13", "N/A", "N/A", "N/A", "N/A", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "N/A", "N/A", "N/A", "N/A", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "PD15", "PD16", "N/A", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" fsioOutputPins2 = bits, U08, 781, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "N/A", "N/A", "PA10", "PA11", "PA12", "PA13", "N/A", "N/A", "N/A", "N/A", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "N/A", "N/A", "N/A", "N/A", "PB12", "PB13", "N/A", "N/A", "N/A", "N/A", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "N/A", "N/A", "N/A", "N/A", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "PD15", "PD16", "N/A", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" fsioOutputPins3 = bits, U08, 782, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "N/A", "N/A", "PA10", "PA11", "PA12", "PA13", "N/A", "N/A", "N/A", "N/A", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "N/A", "N/A", "N/A", "N/A", "PB12", "PB13", "N/A", "N/A", "N/A", "N/A", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "N/A", "N/A", "N/A", "N/A", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "PD15", "PD16", "N/A", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" @@ -418,17 +416,19 @@ page = 1 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", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" sdCardPeriodMs = scalar, S16, 804, "ms", 1, 0, 0, 30000, 0 debugSetTimer = bits, U08, 806, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" -;no TS info - skipping unusedSpiPadding2 offset 807 -;no TS info - skipping unuseduartPadding1 offset 808 + debugMapAveraging = bits, U08, 807, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" + starterRelayPin = bits, U08, 808, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" + starterRelayPinMode = bits, U08, 809, [0:7], "default", "default inverted", "open collector", "open collector inverted" +;no TS info - skipping unuseduartPadding1 offset 810 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 miataNb2VVTRatioFrom = scalar, F32, 820, "value", 1, 0, 0, 1000, 5 miataNb2VVTRatioTo = scalar, F32, 824, "value", 1, 0, 0, 1000, 5 triggerErrorPin = bits, U08, 828, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" - triggerErrorPinMode = bits, U08, 829, [0:1], "default", "default inverted", "open collector", "open collector inverted" + triggerErrorPinMode = bits, U08, 829, [0:7], "default", "default inverted", "open collector", "open collector inverted" acRelayPin = bits, U08, 830, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "N/A", "N/A", "PA10", "PA11", "PA12", "PA13", "N/A", "N/A", "N/A", "N/A", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "N/A", "N/A", "N/A", "N/A", "PB12", "PB13", "N/A", "N/A", "N/A", "N/A", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "N/A", "N/A", "N/A", "N/A", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "PD15", "PD16", "N/A", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" - acRelayPinMode = bits, U08, 831, [0:1], "default", "default inverted", "open collector", "open collector inverted" + acRelayPinMode = bits, U08, 831, [0:7], "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 @@ -476,9 +476,9 @@ page = 1 joystickBPin = bits, U08, 940, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" joystickCPin = bits, U08, 941, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" joystickDPin = bits, U08, 942, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" - consoleUartDevice = bits,U32, 943, [0:1], "Off", "UART1", "UART2", "UART3" - sensorChartMode = bits, S32, 944, [0:2], "none", "trigger", "MAP", "RPM ACCEL", "DETAILED RPM", "INVALID" - mafSensorType = bits, S32, 948, [0:2], "v0", "v1", "v2", "v3" + consoleUartDevice = bits,U32, 943, [0:7], "Off", "UART1", "UART2", "UART3" + sensorChartMode = bits, S32, 944, [0:7], "none", "trigger", "MAP", "RPM ACCEL", "DETAILED RPM", "Fast Aux1", "INVALID", "INVALID" + mafSensorType = bits, S32, 948, [0:7], "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", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" fsioDigitalInputs2 = bits, U08, 953, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" fsioDigitalInputs3 = bits, U08, 954, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" @@ -499,10 +499,18 @@ page = 1 clutchUpPin = bits, U08, 969, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "N/A", "N/A", "PA10", "PA11", "PA12", "PA13", "N/A", "N/A", "N/A", "N/A", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "N/A", "N/A", "N/A", "N/A", "PB12", "PB13", "N/A", "N/A", "N/A", "N/A", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "N/A", "N/A", "N/A", "N/A", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "PD15", "PD16", "N/A", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A" frequencyReportingMapInputPin = bits, U08, 970, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "N/A", "N/A", "PA10", "PA11", "PA12", "PA13", "N/A", "N/A", "N/A", "N/A", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "N/A", "N/A", "N/A", "N/A", "PB12", "PB13", "N/A", "N/A", "N/A", "N/A", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "N/A", "N/A", "N/A", "N/A", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "PD15", "PD16", "N/A", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A" clutchUpPinMode = scalar, U08, 971, "todo", 1, 0, 0, 20, 1 - etbIdleRange = scalar, F32, 972, "angle", 1, 0, -100, 100, 2 - clutchUpPinInverted = bits, U32, 976, [0:0], "false", "true" - clutchDownPinInverted = bits, U32, 976, [1:1], "false", "true" -;no TS info - skipping unusedAtBoardConfigurationEnd offset 980 +;no TS info - skipping unused offset 972 + todoClutchUpPinInverted = bits, U32, 976, [0:0], "false", "true" + todoClutchDownPinInverted= bits, U32, 976, [1:1], "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", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" + 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", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" + 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", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" + etbIo1_controlPinMode = bits, U08, 983, [0:7], "default", "default inverted", "open collector", "open collector inverted" + 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", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" + 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", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" + 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", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" + etbIo2_controlPinMode = bits, U08, 987, [0:7], "default", "default inverted", "open collector", "open collector inverted" +;no TS info - skipping unusedAtOldBoardConfigurationEnd offset 988 vvtDisplayInverted = bits, U32, 1464, [0:0], "false", "true" fuelClosedLoopCorrectionEnabled= bits, U32, 1464, [1:1], "false", "true" isVerboseIAC = bits, U32, 1464, [2:2], "false", "true" @@ -535,9 +543,9 @@ page = 1 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] "PA2", "PA3", "INVALID", "PD3", "INVALID", "INVALID", "INVALID", "PB12", "PB13", "INVALID", "PE2", "INVALID", "PC14", "PC15", "PC16", "PC17", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - acSwitchAdc = bits, U08, 1469, [0:4] "PA2", "PA3", "INVALID", "PD3", "INVALID", "INVALID", "INVALID", "PB12", "PB13", "INVALID", "PE2", "INVALID", "PC14", "PC15", "PC16", "PC17", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - vRefAdcChannel = bits, U08, 1470, [0:4] "PA2", "PA3", "INVALID", "PD3", "INVALID", "INVALID", "INVALID", "PB12", "PB13", "INVALID", "PE2", "INVALID", "PC14", "PC15", "PC16", "PC17", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + hipOutputChannel = bits, U08, 1468, [0:7] "PA2", "PA3", "INVALID", "PD3", "INVALID", "INVALID", "INVALID", "PB12", "PB13", "INVALID", "PE2", "INVALID", "PC14", "PC15", "PC16", "PC17", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + acSwitchAdc = bits, U08, 1469, [0:7] "PA2", "PA3", "INVALID", "PD3", "INVALID", "INVALID", "INVALID", "PB12", "PB13", "INVALID", "PE2", "INVALID", "PC14", "PC15", "PC16", "PC17", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + vRefAdcChannel = bits, U08, 1470, [0:7] "PA2", "PA3", "INVALID", "PD3", "INVALID", "INVALID", "INVALID", "PB12", "PB13", "INVALID", "PE2", "INVALID", "PC14", "PC15", "PC16", "PC17", "Disabled", "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" @@ -561,7 +569,7 @@ page = 1 useAdvanceCorrectionsForCranking= bits, U32, 1476, [18:18], "false", "true" useTPSAdvanceTable = bits, U32, 1476, [19:19], "false", "true" etbCalibrationOnStart = bits, U32, 1476, [20:20], "false", "true" - unused_1484_bit_21 = bits, U32, 1476, [21:21], "false", "true" + useIacPidMultTable = bits, U32, 1476, [21:21], "false", "true" unused_1484_bit_22 = bits, U32, 1476, [22:22], "false", "true" unused_1484_bit_23 = bits, U32, 1476, [23:23], "false", "true" unused_1484_bit_24 = bits, U32, 1476, [24:24], "false", "true" @@ -628,7 +636,9 @@ page = 1 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 -;no TS info - skipping unusedFormerWarmupAfrPid offset 1768 + tps2Min = scalar, S16, 1768, "ADC", 1, 0, 0, 1023, 0 + tps2Max = scalar, S16, 1770, "ADC", 1, 0, 0, 1023, 0 +;no TS info - skipping unusedFormerWarmupAfrPid offset 1772 mapErrorDetectionTooLow = scalar, F32, 1776, "kPa", 1, 0, -100.0, 100.0, 2 mapErrorDetectionTooHigh = scalar, F32, 1780, "kPa", 1, 0, -100.0, 800.0, 2 step1RpmWindow = scalar, S32, 1784, "rpm", 1, 0, 0, 3000.0, 2 @@ -677,15 +687,15 @@ page = 1 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", "Trigger Sync", "Electronic Throttle", "Executor", "Bench Test / TS commands", "Aux Valves", "Analog inputs #1", "INSTANT_RPM", "FSIO_EXPRESSION", "Status", "CJ125", "CAN", "MAP", "Metrics", "ETB#2", "Ion Sense", "TLE8888", "Analog inputs #2", "Dwell Metric", "Aux Temperature", "ETB Logic" + debugMode = bits, U32, 2092, [0:7], "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", "Trigger Sync", "Electronic Throttle", "Executor", "Bench Test / TS commands", "Aux Valves", "Analog inputs #1", "INSTANT_RPM", "FSIO_EXPRESSION", "Status", "CJ125", "CAN", "MAP", "Metrics", "ETB#2", "Ion Sense", "TLE8888", "Analog inputs #2", "Dwell Metric", "Aux Temperature", "ETB Logic" ;no TS info - skipping unused_former_warmup_target_afr offset 2096 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] "PA2", "PA3", "INVALID", "PD3", "INVALID", "INVALID", "INVALID", "PB12", "PB13", "INVALID", "PE2", "INVALID", "PC14", "PC15", "PC16", "PC17", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioAdc2 = bits, U08, 2201, [0:4] "PA2", "PA3", "INVALID", "PD3", "INVALID", "INVALID", "INVALID", "PB12", "PB13", "INVALID", "PE2", "INVALID", "PC14", "PC15", "PC16", "PC17", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioAdc3 = bits, U08, 2202, [0:4] "PA2", "PA3", "INVALID", "PD3", "INVALID", "INVALID", "INVALID", "PB12", "PB13", "INVALID", "PE2", "INVALID", "PC14", "PC15", "PC16", "PC17", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioAdc4 = bits, U08, 2203, [0:4] "PA2", "PA3", "INVALID", "PD3", "INVALID", "INVALID", "INVALID", "PB12", "PB13", "INVALID", "PE2", "INVALID", "PC14", "PC15", "PC16", "PC17", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + fsioAdc1 = bits, U08, 2200, [0:7] "PA2", "PA3", "INVALID", "PD3", "INVALID", "INVALID", "INVALID", "PB12", "PB13", "INVALID", "PE2", "INVALID", "PC14", "PC15", "PC16", "PC17", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + fsioAdc2 = bits, U08, 2201, [0:7] "PA2", "PA3", "INVALID", "PD3", "INVALID", "INVALID", "INVALID", "PB12", "PB13", "INVALID", "PE2", "INVALID", "PC14", "PC15", "PC16", "PC17", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + fsioAdc3 = bits, U08, 2202, [0:7] "PA2", "PA3", "INVALID", "PD3", "INVALID", "INVALID", "INVALID", "PB12", "PB13", "INVALID", "PE2", "INVALID", "PC14", "PC15", "PC16", "PC17", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + fsioAdc4 = bits, U08, 2203, [0:7] "PA2", "PA3", "INVALID", "PD3", "INVALID", "INVALID", "INVALID", "PB12", "PB13", "INVALID", "PE2", "INVALID", "PC14", "PC15", "PC16", "PC17", "Disabled", "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 @@ -694,10 +704,10 @@ page = 1 auxPidPins2 = bits, U08, 2221, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "N/A", "N/A", "PA10", "PA11", "PA12", "PA13", "N/A", "N/A", "N/A", "N/A", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "N/A", "N/A", "N/A", "N/A", "PB12", "PB13", "N/A", "N/A", "N/A", "N/A", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "N/A", "N/A", "N/A", "N/A", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "PD15", "PD16", "N/A", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" auxPidPins3 = bits, U08, 2222, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "N/A", "N/A", "PA10", "PA11", "PA12", "PA13", "N/A", "N/A", "N/A", "N/A", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "N/A", "N/A", "N/A", "N/A", "PB12", "PB13", "N/A", "N/A", "N/A", "N/A", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "N/A", "N/A", "N/A", "N/A", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "PD15", "PD16", "N/A", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" auxPidPins4 = bits, U08, 2223, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "N/A", "N/A", "PA10", "PA11", "PA12", "PA13", "N/A", "N/A", "N/A", "N/A", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "N/A", "N/A", "N/A", "N/A", "PB12", "PB13", "N/A", "N/A", "N/A", "N/A", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "N/A", "N/A", "N/A", "N/A", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "PD15", "PD16", "N/A", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" - cj125SpiDevice = bits,U32, 2224, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4" - cj125CsPinMode = bits, U08, 2225, [0:1], "default", "default inverted", "open collector", "open collector inverted" + cj125SpiDevice = bits,U32, 2224, [0:7], "Off", "SPI1", "SPI2", "SPI3", "SPI4" + cj125CsPinMode = bits, U08, 2225, [0:7], "default", "default inverted", "open collector", "open collector inverted" dizzySparkOutputPin = bits, U08, 2226, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" - dizzySparkOutputPinMode = bits, U08, 2227, [0:1], "default", "default inverted", "open collector", "open collector inverted" + dizzySparkOutputPinMode = bits, U08, 2227, [0:7], "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 @@ -708,10 +718,10 @@ page = 1 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" + storageMode = bits, U32, 2260, [0:7], "Auto", "Always", "Never" 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], "First half", "Second half", "2GZ", "Miata NB2", "mode4", "mode5", "mode6", "mode7" + vvtMode = bits, U32, 2328, [0:7], "First half", "Second half", "2GZ", "Miata NB2", "mode4", "mode5", "mode6", "mode7" biQuad_a0 = scalar, F32, 2332, "v", 1, 0, -1000, 1000, 9 biQuad_a1 = scalar, F32, 2336, "v", 1, 0, -1000, 1000, 9 biQuad_a2 = scalar, F32, 2340, "v", 1, 0, -1000, 1000, 9 @@ -733,7 +743,7 @@ page = 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] "PA2", "PA3", "INVALID", "PD3", "INVALID", "INVALID", "INVALID", "PB12", "PB13", "INVALID", "PE2", "INVALID", "PC14", "PC15", "PC16", "PC17", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + auxTempSensor1_adcChannel = bits, U08, 2472, [0:7] "PA2", "PA3", "INVALID", "PD3", "INVALID", "INVALID", "INVALID", "PB12", "PB13", "INVALID", "PE2", "INVALID", "PC14", "PC15", "PC16", "PC17", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ;no TS info - skipping auxTempSensor1_alignmentFill offset 2473 auxTempSensor2_tempC_1 = scalar, F32, 2476, "*C", 1, 0, -40, 200, 1 auxTempSensor2_tempC_2 = scalar, F32, 2480, "*C", 1, 0, -40, 200, 1 @@ -742,7 +752,7 @@ page = 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] "PA2", "PA3", "INVALID", "PD3", "INVALID", "INVALID", "INVALID", "PB12", "PB13", "INVALID", "PE2", "INVALID", "PC14", "PC15", "PC16", "PC17", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + auxTempSensor2_adcChannel = bits, U08, 2504, [0:7] "PA2", "PA3", "INVALID", "PD3", "INVALID", "INVALID", "INVALID", "PB12", "PB13", "INVALID", "PE2", "INVALID", "PC14", "PC15", "PC16", "PC17", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ;no TS info - skipping auxTempSensor2_alignmentFill offset 2505 fuelClosedLoopCltThreshold = scalar, S16, 2508, "C", 1, 0, 0, 100, 0 fuelClosedLoopTpsThreshold = scalar, S16, 2510, "%", 1, 0, 0, 100, 0 @@ -769,23 +779,23 @@ page = 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" + sdCardSpiDevice = bits,U32, 2592, [0:7], "Off", "SPI1", "SPI2", "SPI3", "SPI4" ;no TS info - skipping unusedSpiPadding4 offset 2593 - 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" - 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" - 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" - 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" - 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" - 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" - 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" - 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" - 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" - stepperEnablePinMode = bits, U08, 2605, [0:1], "default", "default inverted", "open collector", "open collector inverted" + spi1SckMode = bits, U08, 2596, [0:7], "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" + spi1MosiMode = bits, U08, 2597, [0:7], "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" + spi1MisoMode = bits, U08, 2598, [0:7], "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" + spi2SckMode = bits, U08, 2599, [0:7], "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" + spi2MosiMode = bits, U08, 2600, [0:7], "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" + spi2MisoMode = bits, U08, 2601, [0:7], "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" + spi3SckMode = bits, U08, 2602, [0:7], "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" + spi3MosiMode = bits, U08, 2603, [0:7], "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" + spi3MisoMode = bits, U08, 2604, [0:7], "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" + stepperEnablePinMode = bits, U08, 2605, [0:7], "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", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" 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", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" brakePedalPin = bits, U08, 2608, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "N/A", "N/A", "PA10", "PA11", "PA12", "PA13", "N/A", "N/A", "N/A", "N/A", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "N/A", "N/A", "N/A", "N/A", "PB12", "PB13", "N/A", "N/A", "N/A", "N/A", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "N/A", "N/A", "N/A", "N/A", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "PD15", "PD16", "N/A", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A" - cj125ua = bits, U08, 2609, [0:4] "PA2", "PA3", "INVALID", "PD3", "INVALID", "INVALID", "INVALID", "PB12", "PB13", "INVALID", "PE2", "INVALID", "PC14", "PC15", "PC16", "PC17", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - cj125ur = bits, U08, 2610, [0:4] "PA2", "PA3", "INVALID", "PD3", "INVALID", "INVALID", "INVALID", "PB12", "PB13", "INVALID", "PE2", "INVALID", "PC14", "PC15", "PC16", "PC17", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + cj125ua = bits, U08, 2609, [0:7] "PA2", "PA3", "INVALID", "PD3", "INVALID", "INVALID", "INVALID", "PB12", "PB13", "INVALID", "PE2", "INVALID", "PC14", "PC15", "PC16", "PC17", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + cj125ur = bits, U08, 2610, [0:7] "PA2", "PA3", "INVALID", "PD3", "INVALID", "INVALID", "INVALID", "PB12", "PB13", "INVALID", "PE2", "INVALID", "PC14", "PC15", "PC16", "PC17", "Disabled", "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 @@ -815,13 +825,13 @@ page = 1 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] "PA2", "PA3", "INVALID", "PD3", "INVALID", "INVALID", "INVALID", "PB12", "PB13", "INVALID", "PE2", "INVALID", "PC14", "PC15", "PC16", "PC17", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + oilPressure_hwChannel = bits, U08, 2692, [0:7] "PA2", "PA3", "INVALID", "PD3", "INVALID", "INVALID", "INVALID", "PB12", "PB13", "INVALID", "PE2", "INVALID", "PC14", "PC15", "PC16", "PC17", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ;no TS info - skipping oilPressure_align offset 2693 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" + accelerometerSpiDevice = bits,U32, 2712, [0:7], "Off", "SPI1", "SPI2", "SPI3", "SPI4" ;no TS info - skipping unusedSpiPadding5 offset 2713 fsioCurve1Bins = array, F32, 2716, [16], "x", 1, 0, -999, 1000.0, 3 fsioCurve1 = array, F32, 2780, [16], "y", 1, 0, -999, 1000.0, 3 @@ -833,11 +843,11 @@ page = 1 fsioCurve4 = array, F32, 3068, [8], "y", 1, 0, -999, 1000.0, 3 ;no TS info - skipping unusedFlexFuelSensor offset 3100 test557pin = bits, U08, 3101, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" - stepperDirectionPinMode = bits, U08, 3102, [0:1], "default", "default inverted", "open collector", "open collector inverted" - externalKnockSenseAdc = bits, U08, 3103, [0:4] "PA2", "PA3", "INVALID", "PD3", "INVALID", "INVALID", "INVALID", "PB12", "PB13", "INVALID", "PE2", "INVALID", "PC14", "PC15", "PC16", "PC17", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + stepperDirectionPinMode = bits, U08, 3102, [0:7], "default", "default inverted", "open collector", "open collector inverted" + externalKnockSenseAdc = bits, U08, 3103, [0:7] "PA2", "PA3", "INVALID", "PD3", "INVALID", "INVALID", "INVALID", "PB12", "PB13", "INVALID", "PE2", "INVALID", "PC14", "PC15", "PC16", "PC17", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" stepperEnablePin = bits, U08, 3104, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" 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", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" - tle8888_csPinMode = bits, U08, 3106, [0:1], "default", "default inverted", "open collector", "open collector inverted" + tle8888_csPinMode = bits, U08, 3106, [0:7], "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", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" crankingAdvanceBins = array, F32, 3108, [4], "RPM", 1, 0, 0.0, 18000, 2 crankingAdvance = array, F32, 3124, [4], "deg", 1, 0, -20, 90, 2 @@ -871,10 +881,7 @@ page = 1 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 - etb2_directionPin1 = bits, U08, 3964, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" - etb2_directionPin2 = bits, U08, 3965, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" - etb2_controlPin1 = bits, U08, 3966, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PA16", "PA17", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PC16", "PC17", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PE16", "PE17", "TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16" - etb2_controlPinMode = bits, U08, 3967, [0:1], "default", "default inverted", "open collector", "open collector inverted" +;no TS info - skipping unused1059 offset 3964 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 @@ -887,19 +894,22 @@ page = 1 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" - mc33816spiDevice = bits,U32, 4001, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4" + tle8888spiDevice = bits,U32, 4000, [0:7], "Off", "SPI1", "SPI2", "SPI3", "SPI4" + mc33816spiDevice = bits,U32, 4001, [0:7], "Off", "SPI1", "SPI2", "SPI3", "SPI4" idlerpmpid_iTermMin = scalar, S16, 4002, "", 1, 0, -30000, 30000.0, 0 - tle6240spiDevice = bits,U32, 4004, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4" + tle6240spiDevice = bits,U32, 4004, [0:7], "Off", "SPI1", "SPI2", "SPI3", "SPI4" ;no TS info - skipping unusedSpiPadding7 offset 4005 idlerpmpid_iTermMax = scalar, S16, 4006, "", 1, 0, -30000, 30000.0, 0 - mc33972spiDevice = bits,U32, 4008, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4" + mc33972spiDevice = bits,U32, 4008, [0:7], "Off", "SPI1", "SPI2", "SPI3", "SPI4" ;no TS info - skipping unusedSpiPadding8 offset 4009 etbIdleThrottleRange = scalar, F32, 4012, "%", 1, 0, 0, 15, 0 ;no TS info - skipping unusuedvref offset 4016 ;no TS info - skipping unusuedsw offset 4020 ;no TS info - skipping alFIn offset 4024 -;no TS info - skipping unusedSpiPadding3 offset 4036 + 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 @@ -1061,6 +1071,7 @@ page = 1 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" idlePidRpmUpperLimit = "Relative to the target idle RPM" 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." @@ -1097,6 +1108,10 @@ page = 1 idlePidFalloffDeltaRpm = "Taper out idle timing control over this range as the engine leaves idle conditions" tpsAccelFractionPeriod = "A delay in cycles between fuel-enrich. portions" tpsAccelFractionDivisor = "A fraction divisor: 1 or less = entire portion at once, or split into diminishing fractions" + triggerCompCenterVolt = "Trigger comparator center point voltage" + triggerCompHystMin = "Trigger comparator hysteresis voltage (Min)" + triggerCompHystMax = "Trigger comparator hysteresis voltage (Max)" + triggerCompSensorSatRpm = "VR-sensor saturation RPM" ; CONFIG_DEFINITION_END @@ -1748,6 +1763,15 @@ fileVersion = { 20190701 } 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, engineLoad + zBins = iacPidMultTable +; gridHeight = 2.0 + gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. + upDownLabel = "(Later)", "(Sooner)" + [GaugeConfigurations] gaugeCategory = Sensors - Extra 2 @@ -2095,6 +2119,7 @@ menuDialog = main # Digital outputs subMenu = mainRelay, "Main relay" + subMenu = starterRelay, "Starter relay" subMenu = fuelPump, "Fuel rail" subMenu = fanSetting, "Fan" subMenu = tachSettings, "Tachometer" @@ -2167,6 +2192,8 @@ menuDialog = main 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 @@ -2585,6 +2612,12 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" 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 = triggerInputs, "Trigger Inputs" field = "!ECU reboot needed to apply these settings" field = "#Cam is primary if you have cam sensor" @@ -2593,6 +2626,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" 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 + panel = triggerInputComparator dialog = allPinsSensors, "Sensors" field = "CLT ADC input", clt_adcChannel @@ -2663,6 +2697,8 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Fan Pin Mode", fanPinMode field = "Main Relay Pin", mainRelayPin field = "Main Relay Mode", mainRelayPinMode + field = "Starter Relay Pin", starterRelayPin + field = "Starter Relay Mode", starterRelayPinMode field = "aux valve #1", auxValves1 field = "aux valve #2", auxValves2 @@ -2731,6 +2767,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Debug Trigger Sync", debugTriggerSync field = "Debug Timer Callback", debugTimerCallback field = "Debug Set Timer", debugSetTimer + field = "Aux Fast Analog", auxFastSensor1_adcChannel dialog = allPins1_3 field = "FSIO ADC #1", fsioAdc1 @@ -2953,6 +2990,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" 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 @@ -3006,6 +3044,10 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Pin", mainRelayPin field = "Pin mode", mainRelayPinMode + dialog = starterRelay, "Starter relay output" + field = "Pin", starterRelayPin + field = "Pin mode", starterRelayPinMode + dialog = statusLeds, "Status LEDs" field = "Running status LED", runningLedPin field = "TS communication status LED", communicationLedPin @@ -3175,7 +3217,9 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" ; Board->Connection dialog = tsPort, "TunerStudio Port" field = "tunerStudioSerialSpeed", tunerStudioSerialSpeed - field = "Use PC10/PC11 serial?", useSerialPort + field = "Use UART/TTL serial?", useSerialPort + field = "RX pin", binarySerialRxPin, {useSerialPort == 1} + field = "TX pin", binarySerialTxPin, {useSerialPort == 1} field = "uartConsoleSerialSpeed", uartConsoleSerialSpeed dialog = canBus, "CAN Bus" @@ -3218,7 +3262,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" commandButton = "Reinit", cmd_tle8888_init dialog = connection, "", yAxis - field = "STM32 vRef voltage", adcVcc + field = "ADC vRef voltage", adcVcc panel = tsPort panel = canBus panel = sdCard @@ -3479,16 +3523,17 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Pause ETB control", pauseEtbControl field = "Throttle Pedal Up", throttlePedalUpVoltage field = "Throttle Pedal Wide Open", throttlePedalWOTVoltage + field = "Two-wire mode", etb_use_two_wires, {throttlePedalPositionAdcChannel != 16} field = "PWM Frequency", etbFreq, {throttlePedalPositionAdcChannel != 16} field = etbCalibrationOnStart, etbCalibrationOnStart - field = "No1 Direction #1", etb1_directionPin1, {throttlePedalPositionAdcChannel != 16} - field = "No1 Direction #2", etb1_directionPin2, {throttlePedalPositionAdcChannel != 16} - field = "Two-wire mode", etb1_use_two_wires, {throttlePedalPositionAdcChannel != 16} - field = "No1 Control #1", etb1_controlPin1, {throttlePedalPositionAdcChannel != 16 && etb1_use_two_wires == 0} - field = "No2 Direction #1", etb2_directionPin1, {throttlePedalPositionAdcChannel != 16} - field = "No2 Direction #2", etb2_directionPin2, {throttlePedalPositionAdcChannel != 16} - field = "Two-wire mode", etb2_use_two_wires, {throttlePedalPositionAdcChannel != 16} - field = "No2 Control #1", etb2_controlPin1, {throttlePedalPositionAdcChannel != 16 && etb2_use_two_wires == 0} + field = "No1 Direction #1", etbIo1_directionPin1, {throttlePedalPositionAdcChannel != 16} + field = "No1 Direction #2", etbIo1_directionPin2, {throttlePedalPositionAdcChannel != 16} + field = "No1 Control #1", etbIo1_controlPin1, {throttlePedalPositionAdcChannel != 16 && etb_use_two_wires == 0} + field = "No2 Direction #1", etbIo2_directionPin1, {throttlePedalPositionAdcChannel != 16} + field = "No2 Direction #2", etbIo2_directionPin2, {throttlePedalPositionAdcChannel != 16} + field = "No2 Control #1", etb2_controlPin1, {throttlePedalPositionAdcChannel != 16 && etb_use_two_wires == 0} + field = "TPS#2 min", tps2Min, {etbIo2_directionPin1 != 0} + field = "TPS#2 max", tps2Max, {etbIo2_directionPin1 != 0} panel = etbPidDialog dialog = etbDialogRight diff --git a/firmware/tunerstudio/rusefi_microrusefi.ini b/firmware/tunerstudio/rusefi_microrusefi.ini index 7fba7f7645..fe06e7febc 100644 --- a/firmware/tunerstudio/rusefi_microrusefi.ini +++ b/firmware/tunerstudio/rusefi_microrusefi.ini @@ -85,11 +85,11 @@ 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 integration\rusefi_config.txt Tue Nov 19 09:22:36 EST 2019 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sun Dec 08 00:32:31 EST 2019 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" + engineType = bits, S32, 0, [0:7], "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 @@ -106,8 +106,8 @@ page = 1 useBiQuadAnalogFiltering= bits, U32, 76, [9:9], "false", "true" cj125isUaDivided = bits, U32, 76, [10:10], "false", "true" cj125isLsu49 = bits, U32, 76, [11:11], "false", "true" - etb1_use_two_wires = bits, U32, 76, [12:12], "false", "true" - etb2_use_two_wires = bits, U32, 76, [13:13], "false", "true" + etb_use_two_wires = bits, U32, 76, [12:12], "false", "true" + unusedHereo_wires = bits, U32, 76, [13:13], "false", "true" showSdCardWarning = bits, U32, 76, [14:14], "false", "true" cj125isUrDivided = bits, U32, 76, [15:15], "false", "true" useTLE8888_hall_mode = bits, U32, 76, [16:16], "false", "true" @@ -141,8 +141,8 @@ page = 1 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", "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" + map_sensor_type = bits, U32, 244, [0:7] "Custom", "DENSO183", "MPX4250", "HONDA3BAR", "NEON_2003", "22012AA090", "3 Bar", "MPX4100", "Toyota 89420-02010", "MPX4250A", "INVALID" + map_sensor_hwChannel = bits, U08, 248, [0:7] "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" ;no TS info - skipping map_sensor_align offset 249 clt_tempC_1 = scalar, F32, 252, "*C", 1, 0, -40, 200, 1 clt_tempC_2 = scalar, F32, 256, "*C", 1, 0, -40, 200, 1 @@ -151,7 +151,7 @@ page = 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" + clt_adcChannel = bits, U08, 280, [0:7] "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" ;no TS info - skipping clt_alignmentFill offset 281 iat_tempC_1 = scalar, F32, 284, "*C", 1, 0, -40, 200, 1 iat_tempC_2 = scalar, F32, 288, "*C", 1, 0, -40, 200, 1 @@ -160,7 +160,7 @@ page = 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" + iat_adcChannel = bits, U08, 312, [0:7] "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" ;no TS info - skipping iat_alignmentFill offset 313 step1rpm = scalar, S32, 316, "rpm", 1, 0, 0, 20000.0, 2 step1timing = scalar, S32, 320, "deg", 1, 0, -180, 180, 2 @@ -169,17 +169,17 @@ page = 1 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", "fo20", "fo21", "fo22", "INVALID" + cylindersCount = bits, U32, 400, [0:7], "INVALID", 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, "INVALID", "INVALID", "INVALID" + firingOrder = bits, U32, 404, [0:7], "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", "fo20", "fo21", "fo22", "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", "MAP", "SPEED DENSITY", "MAF Air Charge" - crankingInjectionMode = bits, U32, 424, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" - injectionMode = bits, U32, 428, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" + fuelAlgorithm = bits, U32, 420, [0:7], "MAF", "Alpha-N/TPS", "MAP", "SPEED DENSITY", "MAF Air Charge" + crankingInjectionMode = bits, U32, 424, [0:7], "Simultaneous", "Sequential", "Batch", "Single Point" + injectionMode = bits, U32, 428, [0:7], "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:7], "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 @@ -189,57 +189,57 @@ page = 1 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:1], "BMW", "FIAT", "VAG" , "MAZDA RX8" + canNbcType = bits, U32, 480, [0:7], "BMW", "FIAT", "VAG" , "MAZDA RX8" 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" + ambiguousOperationMode = bits, U32, 488, [0:7], "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:7], "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" - 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" - 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" - 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" + tps1_1AdcChannel = bits, U08, 512, [0:7] "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" + vbattAdcChannel = bits, U08, 513, [0:7] "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" + fuelLevelSensor = bits, U08, 514, [0:7] "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" + tps2_1AdcChannel = bits, U08, 515, [0:7] "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" ;no TS info - skipping overrideCrankingIgnition offset 516 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", "2JZ", "Rover K", "GM LS 24", "Honda CBR 600", "2JZ_1_12", "Honda CBR 600 custom", "3/1 skipped" , "Dodge Neon 2003 crank", "Miata VVT", "trg34", "trg35", "Subaru 7+6", "Jeep 18-2-2-2", "WIP", "Dodge Neon 1995 crank only", "Jeep XJ 4 cyl", "FiatIAQ_P8", "Mazda Z5", "trg43", "trg44", "trg45", "INVALID" + trigger_type = bits, U32, 524, [0:7], "custom toothed wheel", "Ford Aspire", "Dodge Neon 1995", "Miata NA", "Miata NB", "GM_7X", "Cooper R50", "Mazda SOHC 4", "60/2", "36/1", "Honda 4+24+1", "Mitsubishi", "Honda 4+24", "Honda 1+4+24", "Dodge Neon 2003", "Mazda DOHC 1+4", "1+1", "1+60/2", "Single Tooth", "Dodge Ram 1+16", "60/2 VW", "Honda 1+24", "Dodge Stratus", "36_2_2_2", "Nissan Primera", "2JZ", "Rover K", "GM LS 24", "Honda CBR 600", "2JZ_1_12", "Honda CBR 600 custom", "3/1 skipped" , "Dodge Neon 2003 crank", "Miata VVT", "trg34", "trg35", "Subaru 7+6", "Jeep 18-2-2-2", "WIP", "Dodge Neon 1995 crank only", "Jeep XJ 4 cyl", "FiatIAQ_P8", "Mazda Z5", "trg43", "trg44", "trg45", "INVALID" trigger_unusedCustomIsSynchronizationNeeded= bits, U32, 528, [0:0], "false", "true" trigger_unusedCustomNeedSecondTriggerInput= bits, U32, 528, [1:1], "false", "true" trigger_useOnlyFirstChannel= bits, U32, 528, [2:2], "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" - 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" - 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" - 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" + hip9011SpiDevice = bits,U32, 540, [0:7], "Off", "SPI1", "SPI2", "SPI3", "SPI4" + high_fuel_pressure_sensor_1 = bits, U08, 541, [0:7] "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" + high_fuel_pressure_sensor_2 = bits, U08, 542, [0:7] "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" + mafAdcChannel = bits, U08, 543, [0:7] "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" globalFuelCorrection = scalar, F32, 544, "coef", 1, 0.0, 0, 1000.0, 2 - adcVcc = scalar, F32, 548, "volts", 1, 0.0, 0, 4.0, 3 + adcVcc = scalar, F32, 548, "volts", 1, 0.0, 0, 6.0, 3 ;no TS info - skipping maxKnockSubDeg offset 552 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" 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" 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" 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" - 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" + afr_hwChannel = bits, U08, 560, [0:7] "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" ;no TS info - skipping afr_alignAf offset 561 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" + throttlePedalPositionAdcChannel = bits, U08, 580, [0:7] "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" 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" - tle6240_csPinMode = bits, U08, 582, [0:1], "default", "default inverted", "open collector", "open collector inverted" + tle6240_csPinMode = bits, U08, 582, [0:7], "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" 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", "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" + baroSensor_type = bits, U32, 592, [0:7] "Custom", "DENSO183", "MPX4250", "HONDA3BAR", "NEON_2003", "22012AA090", "3 Bar", "MPX4100", "Toyota 89420-02010", "MPX4250A", "INVALID" + baroSensor_hwChannel = bits, U08, 596, [0:7] "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" ;no TS info - skipping baroSensor_align offset 597 idle_solenoidFrequency = scalar, S32, 600, "Hz", 1, 0, 0, 3000, 0 idle_solenoidPin = bits, U08, 604, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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" + idle_solenoidPinMode = bits, U08, 607, [0:7], "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 @@ -268,8 +268,8 @@ page = 1 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","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","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" 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","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","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" 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","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","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" - 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" + injectionPinMode = bits, U08, 648, [0:7], "default", "default inverted", "open collector", "open collector inverted" + ignitionPinMode = bits, U08, 649, [0:7], "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" 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" 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" @@ -279,41 +279,39 @@ page = 1 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" 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" 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","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","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" - fuelPumpPinMode = bits, U08, 659, [0:1], "default", "default inverted", "open collector", "open collector inverted" + fuelPumpPinMode = bits, U08, 659, [0:7], "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","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","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" - 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" + malfunctionIndicatorPinMode = bits, U08, 661, [0:7], "default", "default inverted", "open collector", "open collector inverted" + fanPinMode = bits, U08, 662, [0:7], "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","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","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" 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" 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","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","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" - alternatorControlPinMode = bits, U08, 666, [0:1], "default", "default inverted", "open collector", "open collector inverted" + alternatorControlPinMode = bits, U08, 666, [0:7], "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" 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" 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" 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" - electronicThrottlePin1Mode = bits, U08, 672, [0:1], "default", "default inverted", "open collector", "open collector inverted" + electronicThrottlePin1Mode = bits, U08, 672, [0:7], "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" 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" - max31855spiDevice = bits,U32, 675, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4" + max31855spiDevice = bits,U32, 675, [0:7], "Off", "SPI1", "SPI2", "SPI3", "SPI4" 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" - digitalPotentiometerSpiDevice = bits,U32, 677, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4" + digitalPotentiometerSpiDevice = bits,U32, 677, [0:7], "Off", "SPI1", "SPI2", "SPI3", "SPI4" 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" - mc33972_csPinMode = bits, U08, 679, [0:1], "default", "default inverted", "open collector", "open collector inverted" - etb1_directionPin1 = bits, U08, 680, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etb1_directionPin2 = bits, U08, 681, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etb1_controlPin1 = bits, U08, 682, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etb1_controlPinMode = bits, U08, 683, [0:1], "default", "default inverted", "open collector", "open collector inverted" + mc33972_csPinMode = bits, U08, 679, [0:7], "default", "default inverted", "open collector", "open collector inverted" + auxFastSensor1_adcChannel = bits, U08, 680, [0:7] "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" +;no TS info - skipping unused556 offset 681 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" + afr_type = bits, S32, 692, [0:7], "BPSX", "Innovate", "14Point7", "Narrow", "PLX", "Custom" fuelClosedLoopAfrLowThreshold = scalar, F32, 696, "ratio", 1, 0, 0, 100, 1 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" 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" 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" - hip9011CsPinMode = bits, U08, 703, [0:1], "default", "default inverted", "open collector", "open collector inverted" + hip9011CsPinMode = bits, U08, 703, [0:7], "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","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","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" - tachOutputPinMode = bits, U08, 705, [0:1], "default", "default inverted", "open collector", "open collector inverted" + tachOutputPinMode = bits, U08, 705, [0:7], "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","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","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" 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" 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" @@ -325,15 +323,15 @@ page = 1 ;no TS info - skipping lcdThreadPeriodMs offset 720 ;no TS info - skipping generalPeriodicThreadPeriodMs offset 724 tunerStudioSerialSpeed = scalar, U32, 728, "BPs", 1, 0, 0,1000000, 0 - canDeviceMode = bits, U32, 732, [0:2], "v0", "v1" + canDeviceMode = bits, U32, 732, [0:7], "v0", "v1" 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" 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" 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" - 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" + triggerSimulatorPinModes1 = bits, U08, 739, [0:7], "default", "default inverted", "open collector", "open collector inverted" + triggerSimulatorPinModes2 = bits, U08, 740, [0:7], "default", "default inverted", "open collector", "open collector inverted" + triggerSimulatorPinModes3 = bits, U08, 741, [0:7], "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","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","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" - o2heaterPinModeTodO = bits, U08, 743, [0:1], "default", "default inverted", "open collector", "open collector inverted" + o2heaterPinModeTodO = bits, U08, 743, [0:7], "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" @@ -370,28 +368,28 @@ page = 1 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" 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" 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" - mainRelayPinMode = bits, U08, 752, [0:1], "default", "default inverted", "open collector", "open collector inverted" + mainRelayPinMode = bits, U08, 752, [0:7], "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" 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" - hip9011IntHoldPinMode = bits, U08, 755, [0:1], "default", "default inverted", "open collector", "open collector inverted" + hip9011IntHoldPinMode = bits, U08, 755, [0:7], "default", "default inverted", "open collector", "open collector inverted" ;no TS info - skipping logicAnalyzerMode offset 756 ;no TS info - skipping unrealisticRpmThreashold offset 760 - 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" + gpioPinModes1 = bits, U08, 764, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes2 = bits, U08, 765, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes3 = bits, U08, 766, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes4 = bits, U08, 767, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes5 = bits, U08, 768, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes6 = bits, U08, 769, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes7 = bits, U08, 770, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes8 = bits, U08, 771, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes9 = bits, U08, 772, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes10 = bits, U08, 773, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes11 = bits, U08, 774, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes12 = bits, U08, 775, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes13 = bits, U08, 776, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes14 = bits, U08, 777, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes15 = bits, U08, 778, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes16 = bits, U08, 779, [0:7], "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","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","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" 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","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","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" 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","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","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" @@ -418,17 +416,19 @@ page = 1 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" sdCardPeriodMs = scalar, S16, 804, "ms", 1, 0, 0, 30000, 0 debugSetTimer = bits, U08, 806, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" -;no TS info - skipping unusedSpiPadding2 offset 807 -;no TS info - skipping unuseduartPadding1 offset 808 + 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" + starterRelayPin = bits, U08, 808, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + starterRelayPinMode = bits, U08, 809, [0:7], "default", "default inverted", "open collector", "open collector inverted" +;no TS info - skipping unuseduartPadding1 offset 810 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 miataNb2VVTRatioFrom = scalar, F32, 820, "value", 1, 0, 0, 1000, 5 miataNb2VVTRatioTo = scalar, F32, 824, "value", 1, 0, 0, 1000, 5 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" - triggerErrorPinMode = bits, U08, 829, [0:1], "default", "default inverted", "open collector", "open collector inverted" + triggerErrorPinMode = bits, U08, 829, [0:7], "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","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","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" - acRelayPinMode = bits, U08, 831, [0:1], "default", "default inverted", "open collector", "open collector inverted" + acRelayPinMode = bits, U08, 831, [0:7], "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 @@ -476,9 +476,9 @@ page = 1 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" 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" 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" - consoleUartDevice = bits,U32, 943, [0:1], "Off", "UART1", "UART2", "UART3" - sensorChartMode = bits, S32, 944, [0:2], "none", "trigger", "MAP", "RPM ACCEL", "DETAILED RPM", "INVALID" - mafSensorType = bits, S32, 948, [0:2], "v0", "v1", "v2", "v3" + consoleUartDevice = bits,U32, 943, [0:7], "Off", "UART1", "UART2", "UART3" + sensorChartMode = bits, S32, 944, [0:7], "none", "trigger", "MAP", "RPM ACCEL", "DETAILED RPM", "Fast Aux1", "INVALID", "INVALID" + mafSensorType = bits, S32, 948, [0:7], "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" 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" 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" @@ -499,10 +499,18 @@ page = 1 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" 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" clutchUpPinMode = scalar, U08, 971, "todo", 1, 0, 0, 20, 1 - etbIdleRange = scalar, F32, 972, "angle", 1, 0, -100, 100, 2 - clutchUpPinInverted = bits, U32, 976, [0:0], "false", "true" - clutchDownPinInverted = bits, U32, 976, [1:1], "false", "true" -;no TS info - skipping unusedAtBoardConfigurationEnd offset 980 +;no TS info - skipping unused offset 972 + todoClutchUpPinInverted = bits, U32, 976, [0:0], "false", "true" + todoClutchDownPinInverted= bits, U32, 976, [1:1], "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" + 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" + 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" + etbIo1_controlPinMode = bits, U08, 983, [0:7], "default", "default inverted", "open collector", "open collector inverted" + 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" + 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" + 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" + etbIo2_controlPinMode = bits, U08, 987, [0:7], "default", "default inverted", "open collector", "open collector inverted" +;no TS info - skipping unusedAtOldBoardConfigurationEnd offset 988 vvtDisplayInverted = bits, U32, 1464, [0:0], "false", "true" fuelClosedLoopCorrectionEnabled= bits, U32, 1464, [1:1], "false", "true" isVerboseIAC = bits, U32, 1464, [2:2], "false", "true" @@ -535,9 +543,9 @@ page = 1 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" - 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" - 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" + hipOutputChannel = bits, U08, 1468, [0:7] "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" + acSwitchAdc = bits, U08, 1469, [0:7] "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" + vRefAdcChannel = bits, U08, 1470, [0:7] "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" 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" @@ -561,7 +569,7 @@ page = 1 useAdvanceCorrectionsForCranking= bits, U32, 1476, [18:18], "false", "true" useTPSAdvanceTable = bits, U32, 1476, [19:19], "false", "true" etbCalibrationOnStart = bits, U32, 1476, [20:20], "false", "true" - unused_1484_bit_21 = bits, U32, 1476, [21:21], "false", "true" + useIacPidMultTable = bits, U32, 1476, [21:21], "false", "true" unused_1484_bit_22 = bits, U32, 1476, [22:22], "false", "true" unused_1484_bit_23 = bits, U32, 1476, [23:23], "false", "true" unused_1484_bit_24 = bits, U32, 1476, [24:24], "false", "true" @@ -628,7 +636,9 @@ page = 1 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 -;no TS info - skipping unusedFormerWarmupAfrPid offset 1768 + tps2Min = scalar, S16, 1768, "ADC", 1, 0, 0, 1023, 0 + tps2Max = scalar, S16, 1770, "ADC", 1, 0, 0, 1023, 0 +;no TS info - skipping unusedFormerWarmupAfrPid offset 1772 mapErrorDetectionTooLow = scalar, F32, 1776, "kPa", 1, 0, -100.0, 100.0, 2 mapErrorDetectionTooHigh = scalar, F32, 1780, "kPa", 1, 0, -100.0, 800.0, 2 step1RpmWindow = scalar, S32, 1784, "rpm", 1, 0, 0, 3000.0, 2 @@ -677,15 +687,15 @@ page = 1 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", "Trigger Sync", "Electronic Throttle", "Executor", "Bench Test / TS commands", "Aux Valves", "Analog inputs #1", "INSTANT_RPM", "FSIO_EXPRESSION", "Status", "CJ125", "CAN", "MAP", "Metrics", "ETB#2", "Ion Sense", "TLE8888", "Analog inputs #2", "Dwell Metric", "Aux Temperature", "ETB Logic" + debugMode = bits, U32, 2092, [0:7], "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", "Trigger Sync", "Electronic Throttle", "Executor", "Bench Test / TS commands", "Aux Valves", "Analog inputs #1", "INSTANT_RPM", "FSIO_EXPRESSION", "Status", "CJ125", "CAN", "MAP", "Metrics", "ETB#2", "Ion Sense", "TLE8888", "Analog inputs #2", "Dwell Metric", "Aux Temperature", "ETB Logic" ;no TS info - skipping unused_former_warmup_target_afr offset 2096 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" - 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" - 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" - 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" + fsioAdc1 = bits, U08, 2200, [0:7] "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" + fsioAdc2 = bits, U08, 2201, [0:7] "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" + fsioAdc3 = bits, U08, 2202, [0:7] "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" + fsioAdc4 = bits, U08, 2203, [0:7] "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" 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 @@ -694,10 +704,10 @@ page = 1 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","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","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" 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","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","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" 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","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","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" - cj125SpiDevice = bits,U32, 2224, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4" - cj125CsPinMode = bits, U08, 2225, [0:1], "default", "default inverted", "open collector", "open collector inverted" + cj125SpiDevice = bits,U32, 2224, [0:7], "Off", "SPI1", "SPI2", "SPI3", "SPI4" + cj125CsPinMode = bits, U08, 2225, [0:7], "default", "default inverted", "open collector", "open collector inverted" dizzySparkOutputPin = bits, U08, 2226, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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" + dizzySparkOutputPinMode = bits, U08, 2227, [0:7], "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 @@ -708,10 +718,10 @@ page = 1 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" + storageMode = bits, U32, 2260, [0:7], "Auto", "Always", "Never" 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], "First half", "Second half", "2GZ", "Miata NB2", "mode4", "mode5", "mode6", "mode7" + vvtMode = bits, U32, 2328, [0:7], "First half", "Second half", "2GZ", "Miata NB2", "mode4", "mode5", "mode6", "mode7" biQuad_a0 = scalar, F32, 2332, "v", 1, 0, -1000, 1000, 9 biQuad_a1 = scalar, F32, 2336, "v", 1, 0, -1000, 1000, 9 biQuad_a2 = scalar, F32, 2340, "v", 1, 0, -1000, 1000, 9 @@ -733,7 +743,7 @@ page = 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" + auxTempSensor1_adcChannel = bits, U08, 2472, [0:7] "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" ;no TS info - skipping auxTempSensor1_alignmentFill offset 2473 auxTempSensor2_tempC_1 = scalar, F32, 2476, "*C", 1, 0, -40, 200, 1 auxTempSensor2_tempC_2 = scalar, F32, 2480, "*C", 1, 0, -40, 200, 1 @@ -742,7 +752,7 @@ page = 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" + auxTempSensor2_adcChannel = bits, U08, 2504, [0:7] "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" ;no TS info - skipping auxTempSensor2_alignmentFill offset 2505 fuelClosedLoopCltThreshold = scalar, S16, 2508, "C", 1, 0, 0, 100, 0 fuelClosedLoopTpsThreshold = scalar, S16, 2510, "%", 1, 0, 0, 100, 0 @@ -769,23 +779,23 @@ page = 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" + sdCardSpiDevice = bits,U32, 2592, [0:7], "Off", "SPI1", "SPI2", "SPI3", "SPI4" ;no TS info - skipping unusedSpiPadding4 offset 2593 - 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" - 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" - 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" - 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" - 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" - 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" - 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" - 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" - 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" - stepperEnablePinMode = bits, U08, 2605, [0:1], "default", "default inverted", "open collector", "open collector inverted" + spi1SckMode = bits, U08, 2596, [0:7], "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" + spi1MosiMode = bits, U08, 2597, [0:7], "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" + spi1MisoMode = bits, U08, 2598, [0:7], "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" + spi2SckMode = bits, U08, 2599, [0:7], "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" + spi2MosiMode = bits, U08, 2600, [0:7], "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" + spi2MisoMode = bits, U08, 2601, [0:7], "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" + spi3SckMode = bits, U08, 2602, [0:7], "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" + spi3MosiMode = bits, U08, 2603, [0:7], "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" + spi3MisoMode = bits, U08, 2604, [0:7], "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" + stepperEnablePinMode = bits, U08, 2605, [0:7], "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" 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" 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" - 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" - 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" + cj125ua = bits, U08, 2609, [0:7] "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" + cj125ur = bits, U08, 2610, [0:7] "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" 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 @@ -815,13 +825,13 @@ page = 1 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" + oilPressure_hwChannel = bits, U08, 2692, [0:7] "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" ;no TS info - skipping oilPressure_align offset 2693 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" + accelerometerSpiDevice = bits,U32, 2712, [0:7], "Off", "SPI1", "SPI2", "SPI3", "SPI4" ;no TS info - skipping unusedSpiPadding5 offset 2713 fsioCurve1Bins = array, F32, 2716, [16], "x", 1, 0, -999, 1000.0, 3 fsioCurve1 = array, F32, 2780, [16], "y", 1, 0, -999, 1000.0, 3 @@ -833,11 +843,11 @@ page = 1 fsioCurve4 = array, F32, 3068, [8], "y", 1, 0, -999, 1000.0, 3 ;no TS info - skipping unusedFlexFuelSensor offset 3100 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" - 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" + stepperDirectionPinMode = bits, U08, 3102, [0:7], "default", "default inverted", "open collector", "open collector inverted" + externalKnockSenseAdc = bits, U08, 3103, [0:7] "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" stepperEnablePin = bits, U08, 3104, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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" - tle8888_csPinMode = bits, U08, 3106, [0:1], "default", "default inverted", "open collector", "open collector inverted" + tle8888_csPinMode = bits, U08, 3106, [0:7], "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" crankingAdvanceBins = array, F32, 3108, [4], "RPM", 1, 0, 0.0, 18000, 2 crankingAdvance = array, F32, 3124, [4], "deg", 1, 0, -20, 90, 2 @@ -871,10 +881,7 @@ page = 1 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 - etb2_directionPin1 = bits, U08, 3964, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etb2_directionPin2 = bits, U08, 3965, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etb2_controlPin1 = bits, U08, 3966, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etb2_controlPinMode = bits, U08, 3967, [0:1], "default", "default inverted", "open collector", "open collector inverted" +;no TS info - skipping unused1059 offset 3964 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 @@ -887,19 +894,22 @@ page = 1 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" - mc33816spiDevice = bits,U32, 4001, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4" + tle8888spiDevice = bits,U32, 4000, [0:7], "Off", "SPI1", "SPI2", "SPI3", "SPI4" + mc33816spiDevice = bits,U32, 4001, [0:7], "Off", "SPI1", "SPI2", "SPI3", "SPI4" idlerpmpid_iTermMin = scalar, S16, 4002, "", 1, 0, -30000, 30000.0, 0 - tle6240spiDevice = bits,U32, 4004, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4" + tle6240spiDevice = bits,U32, 4004, [0:7], "Off", "SPI1", "SPI2", "SPI3", "SPI4" ;no TS info - skipping unusedSpiPadding7 offset 4005 idlerpmpid_iTermMax = scalar, S16, 4006, "", 1, 0, -30000, 30000.0, 0 - mc33972spiDevice = bits,U32, 4008, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4" + mc33972spiDevice = bits,U32, 4008, [0:7], "Off", "SPI1", "SPI2", "SPI3", "SPI4" ;no TS info - skipping unusedSpiPadding8 offset 4009 etbIdleThrottleRange = scalar, F32, 4012, "%", 1, 0, 0, 15, 0 ;no TS info - skipping unusuedvref offset 4016 ;no TS info - skipping unusuedsw offset 4020 ;no TS info - skipping alFIn offset 4024 -;no TS info - skipping unusedSpiPadding3 offset 4036 + 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 @@ -1061,6 +1071,7 @@ page = 1 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" idlePidRpmUpperLimit = "Relative to the target idle RPM" 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." @@ -1097,6 +1108,10 @@ page = 1 idlePidFalloffDeltaRpm = "Taper out idle timing control over this range as the engine leaves idle conditions" tpsAccelFractionPeriod = "A delay in cycles between fuel-enrich. portions" tpsAccelFractionDivisor = "A fraction divisor: 1 or less = entire portion at once, or split into diminishing fractions" + triggerCompCenterVolt = "Trigger comparator center point voltage" + triggerCompHystMin = "Trigger comparator hysteresis voltage (Min)" + triggerCompHystMax = "Trigger comparator hysteresis voltage (Max)" + triggerCompSensorSatRpm = "VR-sensor saturation RPM" ; CONFIG_DEFINITION_END @@ -1748,6 +1763,15 @@ fileVersion = { 20190701 } 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, engineLoad + zBins = iacPidMultTable +; gridHeight = 2.0 + gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. + upDownLabel = "(Later)", "(Sooner)" + [GaugeConfigurations] gaugeCategory = Sensors - Extra 2 @@ -2095,6 +2119,7 @@ menuDialog = main # Digital outputs subMenu = mainRelay, "Main relay" + subMenu = starterRelay, "Starter relay" subMenu = fuelPump, "Fuel rail" subMenu = fanSetting, "Fan" subMenu = tachSettings, "Tachometer" @@ -2167,6 +2192,8 @@ menuDialog = main 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 @@ -2578,6 +2605,12 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" 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 = triggerInputs, "Trigger Inputs" field = "!ECU reboot needed to apply these settings" field = "#Cam is primary if you have cam sensor" @@ -2586,6 +2619,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" 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 + panel = triggerInputComparator dialog = allPinsSensors, "Sensors" field = "CLT ADC input", clt_adcChannel @@ -2649,6 +2683,8 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Fan Pin Mode", fanPinMode field = "Main Relay Pin", mainRelayPin field = "Main Relay Mode", mainRelayPinMode + field = "Starter Relay Pin", starterRelayPin + field = "Starter Relay Mode", starterRelayPinMode field = "aux valve #1", auxValves1 field = "aux valve #2", auxValves2 @@ -2717,6 +2753,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Debug Trigger Sync", debugTriggerSync field = "Debug Timer Callback", debugTimerCallback field = "Debug Set Timer", debugSetTimer + field = "Aux Fast Analog", auxFastSensor1_adcChannel dialog = allPins1_3 field = "FSIO ADC #1", fsioAdc1 @@ -2937,6 +2974,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" 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 @@ -2990,6 +3028,10 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Pin", mainRelayPin field = "Pin mode", mainRelayPinMode + dialog = starterRelay, "Starter relay output" + field = "Pin", starterRelayPin + field = "Pin mode", starterRelayPinMode + dialog = statusLeds, "Status LEDs" field = "Running status LED", runningLedPin field = "TS communication status LED", communicationLedPin @@ -3159,7 +3201,9 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" ; Board->Connection dialog = tsPort, "TunerStudio Port" field = "tunerStudioSerialSpeed", tunerStudioSerialSpeed - field = "Use PC10/PC11 serial?", useSerialPort + field = "Use UART/TTL serial?", useSerialPort + field = "RX pin", binarySerialRxPin, {useSerialPort == 1} + field = "TX pin", binarySerialTxPin, {useSerialPort == 1} field = "uartConsoleSerialSpeed", uartConsoleSerialSpeed dialog = canBus, "CAN Bus" @@ -3202,7 +3246,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" commandButton = "Reinit", cmd_tle8888_init dialog = connection, "", yAxis - field = "STM32 vRef voltage", adcVcc + field = "ADC vRef voltage", adcVcc panel = tsPort panel = canBus panel = sdCard @@ -3462,16 +3506,17 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Pause ETB control", pauseEtbControl field = "Throttle Pedal Up", throttlePedalUpVoltage field = "Throttle Pedal Wide Open", throttlePedalWOTVoltage + field = "Two-wire mode", etb_use_two_wires, {throttlePedalPositionAdcChannel != 16} field = "PWM Frequency", etbFreq, {throttlePedalPositionAdcChannel != 16} field = etbCalibrationOnStart, etbCalibrationOnStart - field = "No1 Direction #1", etb1_directionPin1, {throttlePedalPositionAdcChannel != 16} - field = "No1 Direction #2", etb1_directionPin2, {throttlePedalPositionAdcChannel != 16} - field = "Two-wire mode", etb1_use_two_wires, {throttlePedalPositionAdcChannel != 16} - field = "No1 Control #1", etb1_controlPin1, {throttlePedalPositionAdcChannel != 16 && etb1_use_two_wires == 0} - field = "No2 Direction #1", etb2_directionPin1, {throttlePedalPositionAdcChannel != 16} - field = "No2 Direction #2", etb2_directionPin2, {throttlePedalPositionAdcChannel != 16} - field = "Two-wire mode", etb2_use_two_wires, {throttlePedalPositionAdcChannel != 16} - field = "No2 Control #1", etb2_controlPin1, {throttlePedalPositionAdcChannel != 16 && etb2_use_two_wires == 0} + field = "No1 Direction #1", etbIo1_directionPin1, {throttlePedalPositionAdcChannel != 16} + field = "No1 Direction #2", etbIo1_directionPin2, {throttlePedalPositionAdcChannel != 16} + field = "No1 Control #1", etbIo1_controlPin1, {throttlePedalPositionAdcChannel != 16 && etb_use_two_wires == 0} + field = "No2 Direction #1", etbIo2_directionPin1, {throttlePedalPositionAdcChannel != 16} + field = "No2 Direction #2", etbIo2_directionPin2, {throttlePedalPositionAdcChannel != 16} + field = "No2 Control #1", etb2_controlPin1, {throttlePedalPositionAdcChannel != 16 && etb_use_two_wires == 0} + field = "TPS#2 min", tps2Min, {etbIo2_directionPin1 != 0} + field = "TPS#2 max", tps2Max, {etbIo2_directionPin1 != 0} panel = etbPidDialog dialog = etbDialogRight diff --git a/firmware/tunerstudio/rusefi_prometheus.ini b/firmware/tunerstudio/rusefi_prometheus.ini index 43204f8a36..51a4fdd8c1 100644 --- a/firmware/tunerstudio/rusefi_prometheus.ini +++ b/firmware/tunerstudio/rusefi_prometheus.ini @@ -85,11 +85,11 @@ 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 integration\rusefi_config.txt Tue Nov 19 09:22:40 EST 2019 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sun Dec 08 00:32:37 EST 2019 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" + engineType = bits, S32, 0, [0:7], "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 @@ -106,8 +106,8 @@ page = 1 useBiQuadAnalogFiltering= bits, U32, 76, [9:9], "false", "true" cj125isUaDivided = bits, U32, 76, [10:10], "false", "true" cj125isLsu49 = bits, U32, 76, [11:11], "false", "true" - etb1_use_two_wires = bits, U32, 76, [12:12], "false", "true" - etb2_use_two_wires = bits, U32, 76, [13:13], "false", "true" + etb_use_two_wires = bits, U32, 76, [12:12], "false", "true" + unusedHereo_wires = bits, U32, 76, [13:13], "false", "true" showSdCardWarning = bits, U32, 76, [14:14], "false", "true" cj125isUrDivided = bits, U32, 76, [15:15], "false", "true" useTLE8888_hall_mode = bits, U32, 76, [16:16], "false", "true" @@ -141,8 +141,8 @@ page = 1 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", "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" + map_sensor_type = bits, U32, 244, [0:7] "Custom", "DENSO183", "MPX4250", "HONDA3BAR", "NEON_2003", "22012AA090", "3 Bar", "MPX4100", "Toyota 89420-02010", "MPX4250A", "INVALID" + map_sensor_hwChannel = bits, U08, 248, [0:7] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","NONE","INVALID","INVALID","INVALID" ;no TS info - skipping map_sensor_align offset 249 clt_tempC_1 = scalar, F32, 252, "*C", 1, 0, -40, 200, 1 clt_tempC_2 = scalar, F32, 256, "*C", 1, 0, -40, 200, 1 @@ -151,7 +151,7 @@ page = 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" + clt_adcChannel = bits, U08, 280, [0:7] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","NONE","INVALID","INVALID","INVALID" ;no TS info - skipping clt_alignmentFill offset 281 iat_tempC_1 = scalar, F32, 284, "*C", 1, 0, -40, 200, 1 iat_tempC_2 = scalar, F32, 288, "*C", 1, 0, -40, 200, 1 @@ -160,7 +160,7 @@ page = 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" + iat_adcChannel = bits, U08, 312, [0:7] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","NONE","INVALID","INVALID","INVALID" ;no TS info - skipping iat_alignmentFill offset 313 step1rpm = scalar, S32, 316, "rpm", 1, 0, 0, 20000.0, 2 step1timing = scalar, S32, 320, "deg", 1, 0, -180, 180, 2 @@ -169,17 +169,17 @@ page = 1 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", "fo20", "fo21", "fo22", "INVALID" + cylindersCount = bits, U32, 400, [0:7], "INVALID", 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, "INVALID", "INVALID", "INVALID" + firingOrder = bits, U32, 404, [0:7], "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", "fo20", "fo21", "fo22", "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", "MAP", "SPEED DENSITY", "MAF Air Charge" - crankingInjectionMode = bits, U32, 424, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" - injectionMode = bits, U32, 428, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" + fuelAlgorithm = bits, U32, 420, [0:7], "MAF", "Alpha-N/TPS", "MAP", "SPEED DENSITY", "MAF Air Charge" + crankingInjectionMode = bits, U32, 424, [0:7], "Simultaneous", "Sequential", "Batch", "Single Point" + injectionMode = bits, U32, 428, [0:7], "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:7], "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 @@ -189,57 +189,57 @@ page = 1 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:1], "BMW", "FIAT", "VAG" , "MAZDA RX8" + canNbcType = bits, U32, 480, [0:7], "BMW", "FIAT", "VAG" , "MAZDA RX8" 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" + ambiguousOperationMode = bits, U32, 488, [0:7], "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:7], "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" - 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" - 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" - 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" + tps1_1AdcChannel = bits, U08, 512, [0:7] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","NONE","INVALID","INVALID","INVALID" + vbattAdcChannel = bits, U08, 513, [0:7] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","NONE","INVALID","INVALID","INVALID" + fuelLevelSensor = bits, U08, 514, [0:7] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","NONE","INVALID","INVALID","INVALID" + tps2_1AdcChannel = bits, U08, 515, [0:7] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","NONE","INVALID","INVALID","INVALID" ;no TS info - skipping overrideCrankingIgnition offset 516 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", "2JZ", "Rover K", "GM LS 24", "Honda CBR 600", "2JZ_1_12", "Honda CBR 600 custom", "3/1 skipped" , "Dodge Neon 2003 crank", "Miata VVT", "trg34", "trg35", "Subaru 7+6", "Jeep 18-2-2-2", "WIP", "Dodge Neon 1995 crank only", "Jeep XJ 4 cyl", "FiatIAQ_P8", "Mazda Z5", "trg43", "trg44", "trg45", "INVALID" + trigger_type = bits, U32, 524, [0:7], "custom toothed wheel", "Ford Aspire", "Dodge Neon 1995", "Miata NA", "Miata NB", "GM_7X", "Cooper R50", "Mazda SOHC 4", "60/2", "36/1", "Honda 4+24+1", "Mitsubishi", "Honda 4+24", "Honda 1+4+24", "Dodge Neon 2003", "Mazda DOHC 1+4", "1+1", "1+60/2", "Single Tooth", "Dodge Ram 1+16", "60/2 VW", "Honda 1+24", "Dodge Stratus", "36_2_2_2", "Nissan Primera", "2JZ", "Rover K", "GM LS 24", "Honda CBR 600", "2JZ_1_12", "Honda CBR 600 custom", "3/1 skipped" , "Dodge Neon 2003 crank", "Miata VVT", "trg34", "trg35", "Subaru 7+6", "Jeep 18-2-2-2", "WIP", "Dodge Neon 1995 crank only", "Jeep XJ 4 cyl", "FiatIAQ_P8", "Mazda Z5", "trg43", "trg44", "trg45", "INVALID" trigger_unusedCustomIsSynchronizationNeeded= bits, U32, 528, [0:0], "false", "true" trigger_unusedCustomNeedSecondTriggerInput= bits, U32, 528, [1:1], "false", "true" trigger_useOnlyFirstChannel= bits, U32, 528, [2:2], "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" - 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" - 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" - 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" + hip9011SpiDevice = bits,U32, 540, [0:7], "Off", "SPI1", "SPI2", "SPI3", "SPI4" + high_fuel_pressure_sensor_1 = bits, U08, 541, [0:7] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","NONE","INVALID","INVALID","INVALID" + high_fuel_pressure_sensor_2 = bits, U08, 542, [0:7] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","NONE","INVALID","INVALID","INVALID" + mafAdcChannel = bits, U08, 543, [0:7] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","NONE","INVALID","INVALID","INVALID" globalFuelCorrection = scalar, F32, 544, "coef", 1, 0.0, 0, 1000.0, 2 - adcVcc = scalar, F32, 548, "volts", 1, 0.0, 0, 4.0, 3 + adcVcc = scalar, F32, 548, "volts", 1, 0.0, 0, 6.0, 3 ;no TS info - skipping maxKnockSubDeg offset 552 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" 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" 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" 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" - 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" + afr_hwChannel = bits, U08, 560, [0:7] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","NONE","INVALID","INVALID","INVALID" ;no TS info - skipping afr_alignAf offset 561 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" + throttlePedalPositionAdcChannel = bits, U08, 580, [0:7] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","NONE","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" - tle6240_csPinMode = bits, U08, 582, [0:1], "default", "default inverted", "open collector", "open collector inverted" + tle6240_csPinMode = bits, U08, 582, [0:7], "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" 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", "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" + baroSensor_type = bits, U32, 592, [0:7] "Custom", "DENSO183", "MPX4250", "HONDA3BAR", "NEON_2003", "22012AA090", "3 Bar", "MPX4100", "Toyota 89420-02010", "MPX4250A", "INVALID" + baroSensor_hwChannel = bits, U08, 596, [0:7] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","NONE","INVALID","INVALID","INVALID" ;no TS info - skipping baroSensor_align offset 597 idle_solenoidFrequency = scalar, S32, 600, "Hz", 1, 0, 0, 3000, 0 idle_solenoidPin = bits, U08, 604, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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" + idle_solenoidPinMode = bits, U08, 607, [0:7], "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 @@ -268,8 +268,8 @@ page = 1 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" 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" 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" - 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" + injectionPinMode = bits, U08, 648, [0:7], "default", "default inverted", "open collector", "open collector inverted" + ignitionPinMode = bits, U08, 649, [0:7], "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" 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" 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" @@ -279,41 +279,39 @@ page = 1 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" 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" 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" - fuelPumpPinMode = bits, U08, 659, [0:1], "default", "default inverted", "open collector", "open collector inverted" + fuelPumpPinMode = bits, U08, 659, [0:7], "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" - 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" + malfunctionIndicatorPinMode = bits, U08, 661, [0:7], "default", "default inverted", "open collector", "open collector inverted" + fanPinMode = bits, U08, 662, [0:7], "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" 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" 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" - alternatorControlPinMode = bits, U08, 666, [0:1], "default", "default inverted", "open collector", "open collector inverted" + alternatorControlPinMode = bits, U08, 666, [0:7], "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" 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" 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" 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" - electronicThrottlePin1Mode = bits, U08, 672, [0:1], "default", "default inverted", "open collector", "open collector inverted" + electronicThrottlePin1Mode = bits, U08, 672, [0:7], "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" 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" - max31855spiDevice = bits,U32, 675, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4" + max31855spiDevice = bits,U32, 675, [0:7], "Off", "SPI1", "SPI2", "SPI3", "SPI4" 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" - digitalPotentiometerSpiDevice = bits,U32, 677, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4" + digitalPotentiometerSpiDevice = bits,U32, 677, [0:7], "Off", "SPI1", "SPI2", "SPI3", "SPI4" 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" - mc33972_csPinMode = bits, U08, 679, [0:1], "default", "default inverted", "open collector", "open collector inverted" - etb1_directionPin1 = bits, U08, 680, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etb1_directionPin2 = bits, U08, 681, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etb1_controlPin1 = bits, U08, 682, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etb1_controlPinMode = bits, U08, 683, [0:1], "default", "default inverted", "open collector", "open collector inverted" + mc33972_csPinMode = bits, U08, 679, [0:7], "default", "default inverted", "open collector", "open collector inverted" + auxFastSensor1_adcChannel = bits, U08, 680, [0:7] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","NONE","INVALID","INVALID","INVALID" +;no TS info - skipping unused556 offset 681 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" + afr_type = bits, S32, 692, [0:7], "BPSX", "Innovate", "14Point7", "Narrow", "PLX", "Custom" fuelClosedLoopAfrLowThreshold = scalar, F32, 696, "ratio", 1, 0, 0, 100, 1 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" 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" 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" - hip9011CsPinMode = bits, U08, 703, [0:1], "default", "default inverted", "open collector", "open collector inverted" + hip9011CsPinMode = bits, U08, 703, [0:7], "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" - tachOutputPinMode = bits, U08, 705, [0:1], "default", "default inverted", "open collector", "open collector inverted" + tachOutputPinMode = bits, U08, 705, [0:7], "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" 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" 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" @@ -325,15 +323,15 @@ page = 1 ;no TS info - skipping lcdThreadPeriodMs offset 720 ;no TS info - skipping generalPeriodicThreadPeriodMs offset 724 tunerStudioSerialSpeed = scalar, U32, 728, "BPs", 1, 0, 0,1000000, 0 - canDeviceMode = bits, U32, 732, [0:2], "v0", "v1" + canDeviceMode = bits, U32, 732, [0:7], "v0", "v1" 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" 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" 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" - 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" + triggerSimulatorPinModes1 = bits, U08, 739, [0:7], "default", "default inverted", "open collector", "open collector inverted" + triggerSimulatorPinModes2 = bits, U08, 740, [0:7], "default", "default inverted", "open collector", "open collector inverted" + triggerSimulatorPinModes3 = bits, U08, 741, [0:7], "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" - o2heaterPinModeTodO = bits, U08, 743, [0:1], "default", "default inverted", "open collector", "open collector inverted" + o2heaterPinModeTodO = bits, U08, 743, [0:7], "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" @@ -370,28 +368,28 @@ page = 1 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" 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" 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" - mainRelayPinMode = bits, U08, 752, [0:1], "default", "default inverted", "open collector", "open collector inverted" + mainRelayPinMode = bits, U08, 752, [0:7], "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" 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" - hip9011IntHoldPinMode = bits, U08, 755, [0:1], "default", "default inverted", "open collector", "open collector inverted" + hip9011IntHoldPinMode = bits, U08, 755, [0:7], "default", "default inverted", "open collector", "open collector inverted" ;no TS info - skipping logicAnalyzerMode offset 756 ;no TS info - skipping unrealisticRpmThreashold offset 760 - 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" + gpioPinModes1 = bits, U08, 764, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes2 = bits, U08, 765, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes3 = bits, U08, 766, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes4 = bits, U08, 767, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes5 = bits, U08, 768, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes6 = bits, U08, 769, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes7 = bits, U08, 770, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes8 = bits, U08, 771, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes9 = bits, U08, 772, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes10 = bits, U08, 773, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes11 = bits, U08, 774, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes12 = bits, U08, 775, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes13 = bits, U08, 776, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes14 = bits, U08, 777, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes15 = bits, U08, 778, [0:7], "default", "default inverted", "open collector", "open collector inverted" + gpioPinModes16 = bits, U08, 779, [0:7], "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" 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" 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" @@ -418,17 +416,19 @@ page = 1 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" sdCardPeriodMs = scalar, S16, 804, "ms", 1, 0, 0, 30000, 0 debugSetTimer = bits, U08, 806, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" -;no TS info - skipping unusedSpiPadding2 offset 807 -;no TS info - skipping unuseduartPadding1 offset 808 + 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" + starterRelayPin = bits, U08, 808, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" + starterRelayPinMode = bits, U08, 809, [0:7], "default", "default inverted", "open collector", "open collector inverted" +;no TS info - skipping unuseduartPadding1 offset 810 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 miataNb2VVTRatioFrom = scalar, F32, 820, "value", 1, 0, 0, 1000, 5 miataNb2VVTRatioTo = scalar, F32, 824, "value", 1, 0, 0, 1000, 5 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" - triggerErrorPinMode = bits, U08, 829, [0:1], "default", "default inverted", "open collector", "open collector inverted" + triggerErrorPinMode = bits, U08, 829, [0:7], "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" - acRelayPinMode = bits, U08, 831, [0:1], "default", "default inverted", "open collector", "open collector inverted" + acRelayPinMode = bits, U08, 831, [0:7], "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 @@ -476,9 +476,9 @@ page = 1 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" 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" 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" - consoleUartDevice = bits,U32, 943, [0:1], "Off", "UART1", "UART2", "UART3" - sensorChartMode = bits, S32, 944, [0:2], "none", "trigger", "MAP", "RPM ACCEL", "DETAILED RPM", "INVALID" - mafSensorType = bits, S32, 948, [0:2], "v0", "v1", "v2", "v3" + consoleUartDevice = bits,U32, 943, [0:7], "Off", "UART1", "UART2", "UART3" + sensorChartMode = bits, S32, 944, [0:7], "none", "trigger", "MAP", "RPM ACCEL", "DETAILED RPM", "Fast Aux1", "INVALID", "INVALID" + mafSensorType = bits, S32, 948, [0:7], "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" 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" 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" @@ -499,10 +499,18 @@ page = 1 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" 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" clutchUpPinMode = scalar, U08, 971, "todo", 1, 0, 0, 20, 1 - etbIdleRange = scalar, F32, 972, "angle", 1, 0, -100, 100, 2 - clutchUpPinInverted = bits, U32, 976, [0:0], "false", "true" - clutchDownPinInverted = bits, U32, 976, [1:1], "false", "true" -;no TS info - skipping unusedAtBoardConfigurationEnd offset 980 +;no TS info - skipping unused offset 972 + todoClutchUpPinInverted = bits, U32, 976, [0:0], "false", "true" + todoClutchDownPinInverted= bits, U32, 976, [1:1], "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" + 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" + 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" + etbIo1_controlPinMode = bits, U08, 983, [0:7], "default", "default inverted", "open collector", "open collector inverted" + 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" + 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" + 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" + etbIo2_controlPinMode = bits, U08, 987, [0:7], "default", "default inverted", "open collector", "open collector inverted" +;no TS info - skipping unusedAtOldBoardConfigurationEnd offset 988 vvtDisplayInverted = bits, U32, 1464, [0:0], "false", "true" fuelClosedLoopCorrectionEnabled= bits, U32, 1464, [1:1], "false", "true" isVerboseIAC = bits, U32, 1464, [2:2], "false", "true" @@ -535,9 +543,9 @@ page = 1 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" - 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" - 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" + hipOutputChannel = bits, U08, 1468, [0:7] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","NONE","INVALID","INVALID","INVALID" + acSwitchAdc = bits, U08, 1469, [0:7] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","NONE","INVALID","INVALID","INVALID" + vRefAdcChannel = bits, U08, 1470, [0:7] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","NONE","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" @@ -561,7 +569,7 @@ page = 1 useAdvanceCorrectionsForCranking= bits, U32, 1476, [18:18], "false", "true" useTPSAdvanceTable = bits, U32, 1476, [19:19], "false", "true" etbCalibrationOnStart = bits, U32, 1476, [20:20], "false", "true" - unused_1484_bit_21 = bits, U32, 1476, [21:21], "false", "true" + useIacPidMultTable = bits, U32, 1476, [21:21], "false", "true" unused_1484_bit_22 = bits, U32, 1476, [22:22], "false", "true" unused_1484_bit_23 = bits, U32, 1476, [23:23], "false", "true" unused_1484_bit_24 = bits, U32, 1476, [24:24], "false", "true" @@ -628,7 +636,9 @@ page = 1 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 -;no TS info - skipping unusedFormerWarmupAfrPid offset 1768 + tps2Min = scalar, S16, 1768, "ADC", 1, 0, 0, 1023, 0 + tps2Max = scalar, S16, 1770, "ADC", 1, 0, 0, 1023, 0 +;no TS info - skipping unusedFormerWarmupAfrPid offset 1772 mapErrorDetectionTooLow = scalar, F32, 1776, "kPa", 1, 0, -100.0, 100.0, 2 mapErrorDetectionTooHigh = scalar, F32, 1780, "kPa", 1, 0, -100.0, 800.0, 2 step1RpmWindow = scalar, S32, 1784, "rpm", 1, 0, 0, 3000.0, 2 @@ -677,15 +687,15 @@ page = 1 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", "Trigger Sync", "Electronic Throttle", "Executor", "Bench Test / TS commands", "Aux Valves", "Analog inputs #1", "INSTANT_RPM", "FSIO_EXPRESSION", "Status", "CJ125", "CAN", "MAP", "Metrics", "ETB#2", "Ion Sense", "TLE8888", "Analog inputs #2", "Dwell Metric", "Aux Temperature", "ETB Logic" + debugMode = bits, U32, 2092, [0:7], "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", "Trigger Sync", "Electronic Throttle", "Executor", "Bench Test / TS commands", "Aux Valves", "Analog inputs #1", "INSTANT_RPM", "FSIO_EXPRESSION", "Status", "CJ125", "CAN", "MAP", "Metrics", "ETB#2", "Ion Sense", "TLE8888", "Analog inputs #2", "Dwell Metric", "Aux Temperature", "ETB Logic" ;no TS info - skipping unused_former_warmup_target_afr offset 2096 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" - 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" - 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" - 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" + fsioAdc1 = bits, U08, 2200, [0:7] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","NONE","INVALID","INVALID","INVALID" + fsioAdc2 = bits, U08, 2201, [0:7] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","NONE","INVALID","INVALID","INVALID" + fsioAdc3 = bits, U08, 2202, [0:7] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","NONE","INVALID","INVALID","INVALID" + fsioAdc4 = bits, U08, 2203, [0:7] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","NONE","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 @@ -694,10 +704,10 @@ page = 1 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" 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" 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" - cj125SpiDevice = bits,U32, 2224, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4" - cj125CsPinMode = bits, U08, 2225, [0:1], "default", "default inverted", "open collector", "open collector inverted" + cj125SpiDevice = bits,U32, 2224, [0:7], "Off", "SPI1", "SPI2", "SPI3", "SPI4" + cj125CsPinMode = bits, U08, 2225, [0:7], "default", "default inverted", "open collector", "open collector inverted" dizzySparkOutputPin = bits, U08, 2226, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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" + dizzySparkOutputPinMode = bits, U08, 2227, [0:7], "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 @@ -708,10 +718,10 @@ page = 1 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" + storageMode = bits, U32, 2260, [0:7], "Auto", "Always", "Never" 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], "First half", "Second half", "2GZ", "Miata NB2", "mode4", "mode5", "mode6", "mode7" + vvtMode = bits, U32, 2328, [0:7], "First half", "Second half", "2GZ", "Miata NB2", "mode4", "mode5", "mode6", "mode7" biQuad_a0 = scalar, F32, 2332, "v", 1, 0, -1000, 1000, 9 biQuad_a1 = scalar, F32, 2336, "v", 1, 0, -1000, 1000, 9 biQuad_a2 = scalar, F32, 2340, "v", 1, 0, -1000, 1000, 9 @@ -733,7 +743,7 @@ page = 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" + auxTempSensor1_adcChannel = bits, U08, 2472, [0:7] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","NONE","INVALID","INVALID","INVALID" ;no TS info - skipping auxTempSensor1_alignmentFill offset 2473 auxTempSensor2_tempC_1 = scalar, F32, 2476, "*C", 1, 0, -40, 200, 1 auxTempSensor2_tempC_2 = scalar, F32, 2480, "*C", 1, 0, -40, 200, 1 @@ -742,7 +752,7 @@ page = 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" + auxTempSensor2_adcChannel = bits, U08, 2504, [0:7] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","NONE","INVALID","INVALID","INVALID" ;no TS info - skipping auxTempSensor2_alignmentFill offset 2505 fuelClosedLoopCltThreshold = scalar, S16, 2508, "C", 1, 0, 0, 100, 0 fuelClosedLoopTpsThreshold = scalar, S16, 2510, "%", 1, 0, 0, 100, 0 @@ -769,23 +779,23 @@ page = 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" + sdCardSpiDevice = bits,U32, 2592, [0:7], "Off", "SPI1", "SPI2", "SPI3", "SPI4" ;no TS info - skipping unusedSpiPadding4 offset 2593 - 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" - 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" - 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" - 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" - 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" - 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" - 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" - 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" - 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" - stepperEnablePinMode = bits, U08, 2605, [0:1], "default", "default inverted", "open collector", "open collector inverted" + spi1SckMode = bits, U08, 2596, [0:7], "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" + spi1MosiMode = bits, U08, 2597, [0:7], "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" + spi1MisoMode = bits, U08, 2598, [0:7], "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" + spi2SckMode = bits, U08, 2599, [0:7], "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" + spi2MosiMode = bits, U08, 2600, [0:7], "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" + spi2MisoMode = bits, U08, 2601, [0:7], "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" + spi3SckMode = bits, U08, 2602, [0:7], "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" + spi3MosiMode = bits, U08, 2603, [0:7], "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" + spi3MisoMode = bits, U08, 2604, [0:7], "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" + stepperEnablePinMode = bits, U08, 2605, [0:7], "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" 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" 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" - 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" - 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" + cj125ua = bits, U08, 2609, [0:7] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","NONE","INVALID","INVALID","INVALID" + cj125ur = bits, U08, 2610, [0:7] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","NONE","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 @@ -815,13 +825,13 @@ page = 1 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" + oilPressure_hwChannel = bits, U08, 2692, [0:7] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","NONE","INVALID","INVALID","INVALID" ;no TS info - skipping oilPressure_align offset 2693 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" + accelerometerSpiDevice = bits,U32, 2712, [0:7], "Off", "SPI1", "SPI2", "SPI3", "SPI4" ;no TS info - skipping unusedSpiPadding5 offset 2713 fsioCurve1Bins = array, F32, 2716, [16], "x", 1, 0, -999, 1000.0, 3 fsioCurve1 = array, F32, 2780, [16], "y", 1, 0, -999, 1000.0, 3 @@ -833,11 +843,11 @@ page = 1 fsioCurve4 = array, F32, 3068, [8], "y", 1, 0, -999, 1000.0, 3 ;no TS info - skipping unusedFlexFuelSensor offset 3100 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" - 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" + stepperDirectionPinMode = bits, U08, 3102, [0:7], "default", "default inverted", "open collector", "open collector inverted" + externalKnockSenseAdc = bits, U08, 3103, [0:7] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","NONE","INVALID","INVALID","INVALID" stepperEnablePin = bits, U08, 3104, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "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" - tle8888_csPinMode = bits, U08, 3106, [0:1], "default", "default inverted", "open collector", "open collector inverted" + tle8888_csPinMode = bits, U08, 3106, [0:7], "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" crankingAdvanceBins = array, F32, 3108, [4], "RPM", 1, 0, 0.0, 18000, 2 crankingAdvance = array, F32, 3124, [4], "deg", 1, 0, -20, 90, 2 @@ -871,10 +881,7 @@ page = 1 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 - etb2_directionPin1 = bits, U08, 3964, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etb2_directionPin2 = bits, U08, 3965, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etb2_controlPin1 = bits, U08, 3966, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etb2_controlPinMode = bits, U08, 3967, [0:1], "default", "default inverted", "open collector", "open collector inverted" +;no TS info - skipping unused1059 offset 3964 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 @@ -887,19 +894,22 @@ page = 1 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" - mc33816spiDevice = bits,U32, 4001, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4" + tle8888spiDevice = bits,U32, 4000, [0:7], "Off", "SPI1", "SPI2", "SPI3", "SPI4" + mc33816spiDevice = bits,U32, 4001, [0:7], "Off", "SPI1", "SPI2", "SPI3", "SPI4" idlerpmpid_iTermMin = scalar, S16, 4002, "", 1, 0, -30000, 30000.0, 0 - tle6240spiDevice = bits,U32, 4004, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4" + tle6240spiDevice = bits,U32, 4004, [0:7], "Off", "SPI1", "SPI2", "SPI3", "SPI4" ;no TS info - skipping unusedSpiPadding7 offset 4005 idlerpmpid_iTermMax = scalar, S16, 4006, "", 1, 0, -30000, 30000.0, 0 - mc33972spiDevice = bits,U32, 4008, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4" + mc33972spiDevice = bits,U32, 4008, [0:7], "Off", "SPI1", "SPI2", "SPI3", "SPI4" ;no TS info - skipping unusedSpiPadding8 offset 4009 etbIdleThrottleRange = scalar, F32, 4012, "%", 1, 0, 0, 15, 0 ;no TS info - skipping unusuedvref offset 4016 ;no TS info - skipping unusuedsw offset 4020 ;no TS info - skipping alFIn offset 4024 -;no TS info - skipping unusedSpiPadding3 offset 4036 + 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 @@ -1061,6 +1071,7 @@ page = 1 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" idlePidRpmUpperLimit = "Relative to the target idle RPM" 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." @@ -1097,6 +1108,10 @@ page = 1 idlePidFalloffDeltaRpm = "Taper out idle timing control over this range as the engine leaves idle conditions" tpsAccelFractionPeriod = "A delay in cycles between fuel-enrich. portions" tpsAccelFractionDivisor = "A fraction divisor: 1 or less = entire portion at once, or split into diminishing fractions" + triggerCompCenterVolt = "Trigger comparator center point voltage" + triggerCompHystMin = "Trigger comparator hysteresis voltage (Min)" + triggerCompHystMax = "Trigger comparator hysteresis voltage (Max)" + triggerCompSensorSatRpm = "VR-sensor saturation RPM" ; CONFIG_DEFINITION_END @@ -1748,6 +1763,15 @@ fileVersion = { 20190701 } 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, engineLoad + zBins = iacPidMultTable +; gridHeight = 2.0 + gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. + upDownLabel = "(Later)", "(Sooner)" + [GaugeConfigurations] gaugeCategory = Sensors - Extra 2 @@ -2095,6 +2119,7 @@ menuDialog = main # Digital outputs subMenu = mainRelay, "Main relay" + subMenu = starterRelay, "Starter relay" subMenu = fuelPump, "Fuel rail" subMenu = fanSetting, "Fan" subMenu = tachSettings, "Tachometer" @@ -2167,6 +2192,8 @@ menuDialog = main 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 @@ -2581,6 +2608,12 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" 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 = triggerInputs, "Trigger Inputs" field = "!ECU reboot needed to apply these settings" field = "#Cam is primary if you have cam sensor" @@ -2589,6 +2622,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" 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 + panel = triggerInputComparator dialog = allPinsSensors, "Sensors" field = "CLT ADC input", clt_adcChannel @@ -2659,6 +2693,8 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Fan Pin Mode", fanPinMode field = "Main Relay Pin", mainRelayPin field = "Main Relay Mode", mainRelayPinMode + field = "Starter Relay Pin", starterRelayPin + field = "Starter Relay Mode", starterRelayPinMode field = "aux valve #1", auxValves1 field = "aux valve #2", auxValves2 @@ -2727,6 +2763,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Debug Trigger Sync", debugTriggerSync field = "Debug Timer Callback", debugTimerCallback field = "Debug Set Timer", debugSetTimer + field = "Aux Fast Analog", auxFastSensor1_adcChannel dialog = allPins1_3 field = "FSIO ADC #1", fsioAdc1 @@ -2949,6 +2986,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" 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 @@ -3002,6 +3040,10 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Pin", mainRelayPin field = "Pin mode", mainRelayPinMode + dialog = starterRelay, "Starter relay output" + field = "Pin", starterRelayPin + field = "Pin mode", starterRelayPinMode + dialog = statusLeds, "Status LEDs" field = "Running status LED", runningLedPin field = "TS communication status LED", communicationLedPin @@ -3171,7 +3213,9 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" ; Board->Connection dialog = tsPort, "TunerStudio Port" field = "tunerStudioSerialSpeed", tunerStudioSerialSpeed - field = "Use PC10/PC11 serial?", useSerialPort + field = "Use UART/TTL serial?", useSerialPort + field = "RX pin", binarySerialRxPin, {useSerialPort == 1} + field = "TX pin", binarySerialTxPin, {useSerialPort == 1} field = "uartConsoleSerialSpeed", uartConsoleSerialSpeed dialog = canBus, "CAN Bus" @@ -3214,7 +3258,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" commandButton = "Reinit", cmd_tle8888_init dialog = connection, "", yAxis - field = "STM32 vRef voltage", adcVcc + field = "ADC vRef voltage", adcVcc panel = tsPort panel = canBus panel = sdCard @@ -3475,16 +3519,17 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Pause ETB control", pauseEtbControl field = "Throttle Pedal Up", throttlePedalUpVoltage field = "Throttle Pedal Wide Open", throttlePedalWOTVoltage + field = "Two-wire mode", etb_use_two_wires, {throttlePedalPositionAdcChannel != 16} field = "PWM Frequency", etbFreq, {throttlePedalPositionAdcChannel != 16} field = etbCalibrationOnStart, etbCalibrationOnStart - field = "No1 Direction #1", etb1_directionPin1, {throttlePedalPositionAdcChannel != 16} - field = "No1 Direction #2", etb1_directionPin2, {throttlePedalPositionAdcChannel != 16} - field = "Two-wire mode", etb1_use_two_wires, {throttlePedalPositionAdcChannel != 16} - field = "No1 Control #1", etb1_controlPin1, {throttlePedalPositionAdcChannel != 16 && etb1_use_two_wires == 0} - field = "No2 Direction #1", etb2_directionPin1, {throttlePedalPositionAdcChannel != 16} - field = "No2 Direction #2", etb2_directionPin2, {throttlePedalPositionAdcChannel != 16} - field = "Two-wire mode", etb2_use_two_wires, {throttlePedalPositionAdcChannel != 16} - field = "No2 Control #1", etb2_controlPin1, {throttlePedalPositionAdcChannel != 16 && etb2_use_two_wires == 0} + field = "No1 Direction #1", etbIo1_directionPin1, {throttlePedalPositionAdcChannel != 16} + field = "No1 Direction #2", etbIo1_directionPin2, {throttlePedalPositionAdcChannel != 16} + field = "No1 Control #1", etbIo1_controlPin1, {throttlePedalPositionAdcChannel != 16 && etb_use_two_wires == 0} + field = "No2 Direction #1", etbIo2_directionPin1, {throttlePedalPositionAdcChannel != 16} + field = "No2 Direction #2", etbIo2_directionPin2, {throttlePedalPositionAdcChannel != 16} + field = "No2 Control #1", etb2_controlPin1, {throttlePedalPositionAdcChannel != 16 && etb_use_two_wires == 0} + field = "TPS#2 min", tps2Min, {etbIo2_directionPin1 != 0} + field = "TPS#2 max", tps2Max, {etbIo2_directionPin1 != 0} panel = etbPidDialog dialog = etbDialogRight diff --git a/firmware/util/containers/fl_stack.h b/firmware/util/containers/fl_stack.h index 273c0828d1..a85a45fa5f 100644 --- a/firmware/util/containers/fl_stack.h +++ b/firmware/util/containers/fl_stack.h @@ -10,7 +10,6 @@ #define FL_STACK_H_ #include "global.h" -#include "error_handling.h" template class FLStack { diff --git a/firmware/util/containers/table_helper.cpp b/firmware/util/containers/table_helper.cpp index 1dcfec6aaa..845bdb5869 100644 --- a/firmware/util/containers/table_helper.cpp +++ b/firmware/util/containers/table_helper.cpp @@ -18,10 +18,6 @@ void setRpmBin(float array[], int size, float idleRpm, float topRpm) { array[size - 1] = topRpm; } -void setTableBin(float array[], int size, float from, float to) { - setLinearCurve(array, size, from, to, 0.01); -} - /** * initialize RPM table axis using default RPM range */ diff --git a/firmware/util/containers/table_helper.h b/firmware/util/containers/table_helper.h index d61b1b3a39..d3f29a82d1 100644 --- a/firmware/util/containers/table_helper.h +++ b/firmware/util/containers/table_helper.h @@ -158,20 +158,18 @@ typedef Map3D ign_tps_Map3D_t; typedef Map3D fuel_Map3D_t; typedef Map3D baroCorr_Map3D_t; typedef Map3D pedal2tps_t; +typedef Map3D iacPidMultiplier_t; void setRpmBin(float array[], int size, float idleRpm, float topRpm); -void setTableBin(float array[], int size, float from, float to); - -#define setArrayValues(array, size, value) setTableBin(array, size, value, value) - /** - * @param precision for example '0.1' for one digit fractional part + * @param precision for example '0.1' for one digit fractional part. Default to 0.01, two digits. */ -template -void setLinearCurveAny(vType array[], int size, float from, float to, float precision) { - for (int i = 0; i < size; i++) { - float value = interpolateMsg("setLinearCurve", 0, from, size - 1, to, i); +template +void setLinearCurve(TValue (&array)[TSize], float from, float to, float precision = 0.01f) { + for (int i = 0; i < TSize; i++) { + float value = interpolateMsg("setLinearCurve", 0, from, TSize - 1, to, i); + /** * rounded values look nicer, also we want to avoid precision mismatch with Tuner Studio */ @@ -179,7 +177,13 @@ void setLinearCurveAny(vType array[], int size, float from, float to, float prec } } -#define setLinearCurve setLinearCurveAny +template +void setArrayValues(TValue (&array)[TSize], TValue value) { + for (int i = 0; i < TSize; i++) { + array[i] = value; + } +} + void setRpmTableBin(float array[], int size); #endif /* TABLE_HELPER_H_ */ diff --git a/firmware/util/math/pid.cpp b/firmware/util/math/pid.cpp index 1cd09b0ba7..8546df9aa4 100644 --- a/firmware/util/math/pid.cpp +++ b/firmware/util/math/pid.cpp @@ -12,6 +12,7 @@ #include "os_access.h" #include "pid.h" #include "math.h" +#include "engine_configuration_generated_structures.h" Pid::Pid() { initPidClass(NULL); @@ -28,7 +29,7 @@ void Pid::initPidClass(pid_s *parameters) { reset(); } -bool Pid::isSame(pid_s *parameters) const { +bool Pid::isSame(const pid_s *parameters) const { efiAssert(OBD_PCM_Processor_Fault, this->parameters != NULL, "PID::isSame invalid", false); efiAssert(OBD_PCM_Processor_Fault, parameters != NULL, "PID::isSame NULL", false); return this->parameters->pFactor == parameters->pFactor @@ -153,7 +154,7 @@ void Pid::sleep() { #endif /* EFI_UNIT_TEST */ } -void Pid::showPidStatus(Logging *logging, const char*msg) { +void Pid::showPidStatus(Logging *logging, const char*msg) const { scheduleMsg(logging, "%s settings: offset=%f P=%.5f I=%.5f D=%.5f period=%dms", msg, getOffset(), diff --git a/firmware/util/math/pid.h b/firmware/util/math/pid.h index becd8be186..1374894317 100644 --- a/firmware/util/math/pid.h +++ b/firmware/util/math/pid.h @@ -8,8 +8,6 @@ #ifndef PID_H_ #define PID_H_ -#include "global.h" -#include "engine_configuration_generated_structures.h" #include "engine_state_generated.h" #include "pid_state_generated.h" @@ -30,13 +28,16 @@ #define MS2SEC(x) (x * 0.001) +struct pid_s; +class Logging; + class Pid : public pid_state_s { public: Pid(); explicit Pid(pid_s *parameters); void initPidClass(pid_s *parameters); - bool isSame(pid_s *parameters) const; + bool isSame(const pid_s *parameters) const; /** * This version of the method takes dTime from pid_s @@ -62,7 +63,7 @@ public: void postState(TunerStudioOutputChannels *tsOutputChannels); void postState(TunerStudioOutputChannels *tsOutputChannels, int pMult); #endif /* EFI_TUNER_STUDIO */ - void showPidStatus(Logging *logging, const char*msg); + void showPidStatus(Logging *logging, const char*msg) const; void sleep(); int resetCounter; // todo: move this to pid_s one day diff --git a/hardware/Breakout_134pin_7-967288-1/967288_breakout_v_0_1.jpg b/hardware/Breakout_134pin_7-967288-1/967288_breakout_v_0_1.jpg new file mode 100644 index 0000000000..ea5c5f3b58 Binary files /dev/null and b/hardware/Breakout_134pin_7-967288-1/967288_breakout_v_0_1.jpg differ diff --git a/hardware/Breakout_134pin_7-967288-1/readme.md b/hardware/Breakout_134pin_7-967288-1/readme.md index 4ed3b90acd..7074697eaf 100644 --- a/hardware/Breakout_134pin_7-967288-1/readme.md +++ b/hardware/Breakout_134pin_7-967288-1/readme.md @@ -1,3 +1,5 @@ 2 layer -140x74mm \ No newline at end of file +140x74mm + +![image](967288_breakout_v_0_1.jpg) \ No newline at end of file diff --git a/hardware/readme.md b/hardware/readme.md index 437481133e..4922d0a5ba 100644 --- a/hardware/readme.md +++ b/hardware/readme.md @@ -19,6 +19,7 @@ todo: move Connectors wiki page content into git * [64 pin](176122-6-connector) Mazda Miata NA NB1, Honda Civic * [72 pin](1123038-2-connector) Mazda Miata NB2 * [121 pin](368255-2-connector) Audi +* [134 pin](Breakout_134pin_7-967288-1) BWM * [154 pin](284617-1-connector) Audi # Modules diff --git a/java_console/autotest/src/com/rusefi/AutoTest.java b/java_console/autotest/src/com/rusefi/AutoTest.java index ed48aaca6c..99eae07a0a 100644 --- a/java_console/autotest/src/com/rusefi/AutoTest.java +++ b/java_console/autotest/src/com/rusefi/AutoTest.java @@ -15,6 +15,7 @@ import com.rusefi.waves.EngineReport; import static com.rusefi.IoUtil.sleep; import static com.rusefi.TestingUtils.*; +import static com.rusefi.config.generated.Fields.CMD_PINS; import static com.rusefi.config.generated.Fields.MOCK_MAF_COMMAND; import static com.rusefi.io.CommandQueue.disableCommand; import static com.rusefi.waves.EngineReport.isCloseEnough; @@ -135,8 +136,9 @@ public class AutoTest { } static void setEngineType(int type) { + sendCommand(CMD_PINS); currentEngineType = type; - sendCommand("set engine_type " + type, COMPLEX_COMMAND_RETRY, 30); + sendCommand("set " + Fields.CMD_ENGINE_TYPE + " " + type, COMPLEX_COMMAND_RETRY, 30); sleep(10); sendCommand("enable self_stimulation"); } diff --git a/java_console/autotest/src/com/rusefi/EnduranceTest.java b/java_console/autotest/src/com/rusefi/EnduranceTest.java index 28e6e17e61..cb6ec4cfff 100644 --- a/java_console/autotest/src/com/rusefi/EnduranceTest.java +++ b/java_console/autotest/src/com/rusefi/EnduranceTest.java @@ -1,5 +1,7 @@ package com.rusefi; +import com.rusefi.config.generated.Fields; + import static com.rusefi.IoUtil.sendCommand; import static com.rusefi.IoUtil.sleep; import static com.rusefi.RealHwTest.startRealHardwareTest; @@ -24,12 +26,12 @@ public class EnduranceTest { IoUtil.realHardwareConnect(port); for (int i = 0; i < count; i++) { AutoTest.currentEngineType = 3; - sendCommand("set_engine_type " + 3, AutoTest.COMPLEX_COMMAND_RETRY, 60); + sendCommand("set " + Fields.CMD_ENGINE_TYPE + " " + 3, AutoTest.COMPLEX_COMMAND_RETRY, 60); sleep(2); sendCommand("enable self_stimulation"); // IoUtil.changeRpm(1200); AutoTest.currentEngineType = 28; - sendCommand("set_engine_type " + 28, AutoTest.COMPLEX_COMMAND_RETRY, 60); + sendCommand("set " + Fields.CMD_ENGINE_TYPE + " " + 28, AutoTest.COMPLEX_COMMAND_RETRY, 60); sleep(2); FileLog.MAIN.logLine("++++++++++++++++++++++++++++++++++++ " + i + " +++++++++++++++"); } diff --git a/java_console/io/src/com/rusefi/io/CommandQueue.java b/java_console/io/src/com/rusefi/io/CommandQueue.java index 56d64f4ef9..11bb5c393e 100644 --- a/java_console/io/src/com/rusefi/io/CommandQueue.java +++ b/java_console/io/src/com/rusefi/io/CommandQueue.java @@ -53,7 +53,7 @@ public class CommandQueue { private static boolean isSlowCommand(String cmd) { String lc = cmd.toLowerCase(); - return lc.startsWith("set_engine_type") || lc.startsWith("writeconfig") || lc.startsWith("rewriteconfig"); + return lc.startsWith("set " + Fields.CMD_ENGINE_TYPE) || lc.startsWith("writeconfig") || lc.startsWith("rewriteconfig"); } public static int getTimeout(String cmd) { diff --git a/java_console/models/src/com/rusefi/FiringOrderTSLogic.java b/java_console/models/src/com/rusefi/FiringOrderTSLogic.java index 05693ba11b..5ed9766ab5 100644 --- a/java_console/models/src/com/rusefi/FiringOrderTSLogic.java +++ b/java_console/models/src/com/rusefi/FiringOrderTSLogic.java @@ -15,17 +15,21 @@ public class FiringOrderTSLogic { private static final String FIRING_ORDER_PREFIX = "FO_"; private static final Map ordinal2order = new HashMap<>(); + private static int maxOrdinal; public static void main(String[] args) throws IOException { - readFiringOrders(); - - for (int i = 2; i <= 12; i++) - processId(i); - + invoke("../firmware/controllers/algo/firing_order.h"); } - private static void readFiringOrders() throws IOException { - BufferedReader br = new BufferedReader(new FileReader("../firmware/controllers/algo/firing_order.h")); + public static void invoke(String fileName) throws IOException { + readFiringOrders(fileName); + + for (int i = 2; i <= maxOrdinal; i++) + processId(i); + } + + private static void readFiringOrders(String fileName) throws IOException { + BufferedReader br = new BufferedReader(new FileReader(fileName)); String line; while ((line = br.readLine()) != null) { @@ -50,6 +54,7 @@ public class FiringOrderTSLogic { System.out.println("order " + Arrays.toString(order) + ": " + ordinal); + maxOrdinal = Math.max(ordinal, maxOrdinal); ordinal2order.put(ordinal, order); } diff --git a/java_console/models/src/com/rusefi/PerfTraceTool.java b/java_console/models/src/com/rusefi/PerfTraceTool.java new file mode 100644 index 0000000000..37590f3e05 --- /dev/null +++ b/java_console/models/src/com/rusefi/PerfTraceTool.java @@ -0,0 +1,90 @@ +package com.rusefi; + +import com.rusefi.tracing.Entry; +import com.rusefi.tracing.EnumNames; +import com.rusefi.tracing.JsonOutput; + +import java.io.*; +import java.util.ArrayList; +import java.util.List; + +/** + * This tool generates C# or Java class based on enum values from C/C++ header related to rusEfi own Perf Trace + * + * This allows developers to only edit C/C++ header yet see proper names in chrome://tracing JSON file + * + * This is not used in runtime while profiling actual firmware + * @see JsonOutput + * @see EnumNames + * + * @see EnumNames + * @see Entry + * + */ +public class PerfTraceTool { + private static final String ENUM_START_TAG = "enum_start_tag"; + private static final String ENUM_END_TAG = "enum_end_tag"; + private static final String EOL = "\r\n"; + + public static void readPerfTrace(String inputFileName, String outputFileName, String topClassLine, String stringType) throws IOException { + List enumNames = readEnums(inputFileName); + System.out.println("Got enums: " + enumNames); + + + writeClass(outputFileName, enumNames, topClassLine, stringType); + } + + private static void writeClass(String outputFileName, List enumNames, String topClassLine, String stringType) throws IOException { + BufferedWriter writer = new BufferedWriter(new FileWriter(outputFileName)); + + + writer.write(topClassLine + EOL + EOL); + + writer.write("public class EnumNames {" + EOL); + writer.write("\t" + + stringType + + "[] TypeNames = {" + EOL); + + for (String enumValue : enumNames) + writer.write("\t\"" + enumValue + "\"," + EOL); + + + writer.write("\t};" + EOL); + writer.write("}" + EOL); + writer.close(); + + System.out.println("Done writing to " + outputFileName); + } + + private static List readEnums(String inputFileName) throws IOException { + BufferedReader br = new BufferedReader(new FileReader(inputFileName)); + + boolean weAreInBusiness = false; + List result = new ArrayList<>(); + + String line; + while ((line = br.readLine()) != null) { + if (line.contains(ENUM_START_TAG)) { + weAreInBusiness = true; + continue; + } + + if (line.contains(ENUM_END_TAG)) { + // we are done here + break; + } + + if (!weAreInBusiness) + continue; + + line = line.trim().replaceAll("\\s", ""); + + if (line.endsWith(",")) { + result.add(line.substring(0, line.length() - 1)); + } + + + } + return result; + } +} diff --git a/java_console/models/src/com/rusefi/config/generated/Fields.java b/java_console/models/src/com/rusefi/config/generated/Fields.java index 59298eaacf..793263ad05 100644 --- a/java_console/models/src/com/rusefi/config/generated/Fields.java +++ b/java_console/models/src/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 integration\rusefi_config.txt Mon Nov 18 19:05:30 EST 2019 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Sun Dec 08 00:20:37 EST 2019 // by class com.rusefi.output.FileJavaFieldsConsumer import com.rusefi.config.*; @@ -64,6 +64,7 @@ public class Fields { public static final int autoTuneTpsRocThreshold_offset_hex = 978; public static final int AUX_DIGITAL_VALVE_COUNT = 2; public static final int AUX_PID_COUNT = 4; + public static final int auxFastSensor1_adcChannel_offset = 680; public static final int auxPid1_dFactor_offset = 2620; public static final int auxPid1_iFactor_offset = 2616; public static final int auxPid1_maxValue_offset = 2630; @@ -233,17 +234,17 @@ public class Fields { public static final int cltTimingExtra_offset_hex = 950; public static final int clutchDownPin_offset = 664; public static final int clutchDownPin_offset_hex = 298; - public static final int clutchDownPinInverted_offset = 976; public static final int clutchDownPinMode_offset = 667; public static final int clutchUpPin_offset = 969; - public static final int clutchUpPinInverted_offset = 976; public static final int clutchUpPinMode_offset = 971; public static final String CMD_CALIBRATE_PEDAL_DOWN = "calibrate_pedal_down"; public static final String CMD_CALIBRATE_PEDAL_UP = "calibrate_pedal_up"; public static final String CMD_DATE = "date"; public static final String CMD_DISABLE = "disable"; public static final String CMD_ENABLE = "enable"; + public static final String CMD_ENGINE_TYPE = "engine_type"; public static final String CMD_ETB_DUTY = "set_etb_duty"; + public static final String CMD_PINS = "pins"; public static final String CMD_REBOOT = "reboot"; public static final String CMD_REBOOT_DFU = "reboot_dfu"; public static final String CMD_TRIGGER_HW_INPUT = "trigger_hw_input"; @@ -296,6 +297,8 @@ public class Fields { public static final int cylinderBore_offset_hex = 198; public static final int cylindersCount_offset = 400; public static final int cylindersCount_offset_hex = 190; + public static final int debugMapAveraging_offset = 807; + public static final int debugMapAveraging_offset_hex = 327; public static final int debugMode_offset = 2092; public static final int debugSetTimer_offset = 806; public static final int debugSetTimer_offset_hex = 326; @@ -334,19 +337,8 @@ public class Fields { public static final int engineSnifferRpmThreshold_offset_hex = 4; public static final int engineType_offset = 0; public static final int engineType_offset_hex = 0; - public static final int etb1_controlPin1_offset = 682; - public static final int etb1_controlPinMode_offset = 683; - public static final int etb1_directionPin1_offset = 680; - public static final int etb1_directionPin2_offset = 681; - public static final int etb1_offset = 680; - public static final int etb1_use_two_wires_offset = 76; - public static final int etb2_controlPin1_offset = 3966; - public static final int etb2_controlPinMode_offset = 3967; - public static final int etb2_directionPin1_offset = 3964; - public static final int etb2_directionPin2_offset = 3965; - public static final int etb2_offset = 3964; - public static final int etb2_use_two_wires_offset = 76; public static final int ETB_BIAS_CURVE_LENGTH = 8; + public static final int ETB_COUNT = 2; public static final int etb_dFactor_offset = 1744; public static final int etb_iFactor_offset = 1740; public static final int etb_iTermMax_offset = 3958; @@ -357,13 +349,23 @@ public class Fields { public static final int etb_offset_offset = 1748; public static final int etb_periodMs_offset = 1750; public static final int etb_pFactor_offset = 1736; + public static final int etb_use_two_wires_offset = 76; public static final int etbBiasBins_offset = 3888; public static final int etbBiasValues_offset = 3920; public static final int etbCalibrationOnStart_offset = 1476; public static final int etbDeadband_offset = 3960; public static final int etbFreq_offset = 2514; - public static final int etbIdleRange_offset = 972; public static final int etbIdleThrottleRange_offset = 4012; + public static final int etbIo1_controlPin1_offset = 982; + public static final int etbIo1_controlPinMode_offset = 983; + public static final int etbIo1_directionPin1_offset = 980; + public static final int etbIo1_directionPin2_offset = 981; + public static final int etbIo1_offset = 980; + public static final int etbIo2_controlPin1_offset = 986; + public static final int etbIo2_controlPinMode_offset = 987; + public static final int etbIo2_directionPin1_offset = 984; + public static final int etbIo2_directionPin2_offset = 985; + public static final int etbIo2_offset = 984; public static final int etbNeutralPosition_offset = 1471; public static final int externalKnockSenseAdc_offset = 3103; public static final int extraInjectionOffset_offset = 432; @@ -1107,6 +1109,10 @@ public class Fields { public static final int spi3mosiPin_offset = 934; public static final int spi3SckMode_offset = 2602; public static final int spi3sckPin_offset = 936; + public static final int starterRelayPin_offset = 808; + public static final int starterRelayPin_offset_hex = 328; + public static final int starterRelayPinMode_offset = 809; + public static final int starterRelayPinMode_offset_hex = 329; public static final int startOfCrankingPrimingPulse_offset = 2032; public static final int startUpFuelPumpDuration_offset = 1892; public static final int startUpFuelPumpDuration_offset_hex = 764; @@ -1173,12 +1179,16 @@ public class Fields { public static final int tle8888_cs_offset = 3105; public static final int tle8888_csPinMode_offset = 3106; public static final int tle8888spiDevice_offset = 4000; + public static final int todoClutchDownPinInverted_offset = 976; + public static final int todoClutchUpPinInverted_offset = 976; public static final String TOP_DEAD_CENTER_MESSAGE = "r"; public static final int TOTAL_CONFIG_SIZE = 20000; public static final int tps1_1AdcChannel_offset = 512; public static final int tps1_1AdcChannel_offset_hex = 200; public static final int tps2_1AdcChannel_offset = 515; public static final int tps2_1AdcChannel_offset_hex = 203; + public static final int tps2Max_offset = 1770; + public static final int tps2Min_offset = 1768; public static final int TPS_TPS_ACCEL_TABLE = 8; public static final int tpsAccelEnrichmentThreshold_offset = 2048; public static final int tpsAccelEnrichmentThreshold_offset_hex = 800; @@ -1214,6 +1224,10 @@ public class Fields { public static final int trigger_unusedCustomNeedSecondTriggerInput_offset_hex = 210; public static final int trigger_useOnlyFirstChannel_offset = 528; public static final int trigger_useOnlyFirstChannel_offset_hex = 210; + public static final int triggerCompCenterVolt_offset = 4036; + public static final int triggerCompHystMax_offset = 4038; + public static final int triggerCompHystMin_offset = 4037; + public static final int triggerCompSensorSatRpm_offset = 4039; public static final int triggerErrorPin_offset = 828; public static final int triggerErrorPinMode_offset = 829; public static final int triggerInputPins1_offset = 700; @@ -1234,8 +1248,9 @@ public class Fields { public static final int twoWireBatchInjection_offset = 1476; public static final int uartConsoleSerialSpeed_offset = 2076; public static final int unrealisticRpmThreashold_offset = 760; + public static final int unused1059_offset = 3964; public static final int unused1234234_offset = 2042; - public static final int unused_1484_bit_21_offset = 1476; + public static final int unused556_offset = 681; public static final int unused_1484_bit_22_offset = 1476; public static final int unused_1484_bit_23_offset = 1476; public static final int unused_1484_bit_24_offset = 1476; @@ -1249,21 +1264,19 @@ public class Fields { public static final int unused_board_984_31_offset = 744; public static final int unused_former_warmup_target_afr_offset = 2096; public static final int unused_former_warmup_target_afr_offset_hex = 830; + public static final int unused_offset = 972; public static final int unusedAnotherOne_offset = 744; - public static final int unusedAtBoardConfigurationEnd_offset = 980; + public static final int unusedAtOldBoardConfigurationEnd_offset = 988; public static final int unusedErrorPin_offset = 2040; public static final int unusedFlexFuelSensor_offset = 3100; - public static final int unusedFormerWarmupAfrPid_offset = 1768; + public static final int unusedFormerWarmupAfrPid_offset = 1772; + public static final int unusedHereo_wires_offset = 76; public static final int unusedOldWarmupAfr_offset = 744; - public static final int unusedSpiPadding2_offset = 807; - public static final int unusedSpiPadding2_offset_hex = 327; - public static final int unusedSpiPadding3_offset = 4036; public static final int unusedSpiPadding4_offset = 2593; public static final int unusedSpiPadding5_offset = 2713; public static final int unusedSpiPadding7_offset = 4005; public static final int unusedSpiPadding8_offset = 4009; - public static final int unuseduartPadding1_offset = 808; - public static final int unuseduartPadding1_offset_hex = 328; + public static final int unuseduartPadding1_offset = 810; public static final int unusuedsw_offset = 4020; public static final int unusuedvref_offset = 4016; public static final int useAdvanceCorrectionsForCranking_offset = 1476; @@ -1283,6 +1296,7 @@ public class Fields { public static final int useFSIO6ForRevLimiter_offset = 1464; public static final int useFSIO8ForServo1_offset = 1464; public static final int useFSIO9ForServo2_offset = 1464; + public static final int useIacPidMultTable_offset = 1476; public static final int useIacTableForCoasting_offset = 744; public static final int useIdleTimingPidControl_offset = 744; public static final int useInstantRpmForIdle_offset = 76; @@ -1342,8 +1356,8 @@ public class Fields { public static final Field USEBIQUADANALOGFILTERING = Field.create("USEBIQUADANALOGFILTERING", 76, FieldType.BIT, 9); public static final Field CJ125ISUADIVIDED = Field.create("CJ125ISUADIVIDED", 76, FieldType.BIT, 10); public static final Field CJ125ISLSU49 = Field.create("CJ125ISLSU49", 76, FieldType.BIT, 11); - public static final Field ETB1_USE_TWO_WIRES = Field.create("ETB1_USE_TWO_WIRES", 76, FieldType.BIT, 12); - public static final Field ETB2_USE_TWO_WIRES = Field.create("ETB2_USE_TWO_WIRES", 76, FieldType.BIT, 13); + public static final Field ETB_USE_TWO_WIRES = Field.create("ETB_USE_TWO_WIRES", 76, FieldType.BIT, 12); + public static final Field UNUSEDHEREO_WIRES = Field.create("UNUSEDHEREO_WIRES", 76, FieldType.BIT, 13); public static final Field SHOWSDCARDWARNING = Field.create("SHOWSDCARDWARNING", 76, FieldType.BIT, 14); public static final Field CJ125ISURDIVIDED = Field.create("CJ125ISURDIVIDED", 76, FieldType.BIT, 15); public static final Field USETLE8888_HALL_MODE = Field.create("USETLE8888_HALL_MODE", 76, FieldType.BIT, 16); @@ -1532,10 +1546,7 @@ public class Fields { public static final Field DIGITALPOTENTIOMETERSPIDEVICE = Field.create("DIGITALPOTENTIOMETERSPIDEVICE", 677, FieldType.INT8); public static final Field MC33972_CS = Field.create("MC33972_CS", 678, FieldType.INT8, brain_pin_e); public static final Field MC33972_CSPINMODE = Field.create("MC33972_CSPINMODE", 679, FieldType.INT8, pin_output_mode_e); - public static final Field ETB1_DIRECTIONPIN1 = Field.create("ETB1_DIRECTIONPIN1", 680, FieldType.INT8, brain_pin_e); - public static final Field ETB1_DIRECTIONPIN2 = Field.create("ETB1_DIRECTIONPIN2", 681, FieldType.INT8, brain_pin_e); - public static final Field ETB1_CONTROLPIN1 = Field.create("ETB1_CONTROLPIN1", 682, FieldType.INT8, brain_pin_e); - public static final Field ETB1_CONTROLPINMODE = Field.create("ETB1_CONTROLPINMODE", 683, FieldType.INT8, pin_output_mode_e); + public static final Field AUXFASTSENSOR1_ADCCHANNEL = Field.create("AUXFASTSENSOR1_ADCCHANNEL", 680, FieldType.INT8, adc_channel_e); public static final Field FUELLEVELEMPTYTANKVOLTAGE = Field.create("FUELLEVELEMPTYTANKVOLTAGE", 684, FieldType.FLOAT); public static final Field FUELLEVELFULLTANKVOLTAGE = Field.create("FUELLEVELFULLTANKVOLTAGE", 688, FieldType.FLOAT); public static final String[] ego_sensor_e = {"BPSX", "Innovate", "14Point7", "Narrow", "PLX", "Custom"}; @@ -1651,7 +1662,9 @@ public class Fields { public static final Field MAX31855_CS8 = Field.create("MAX31855_CS8", 803, FieldType.INT8, brain_pin_e); public static final Field SDCARDPERIODMS = Field.create("SDCARDPERIODMS", 804, FieldType.INT16); public static final Field DEBUGSETTIMER = Field.create("DEBUGSETTIMER", 806, FieldType.INT8, brain_pin_e); - public static final Field UNUSEDSPIPADDING2 = Field.create("UNUSEDSPIPADDING2", 807, FieldType.INT8); + public static final Field DEBUGMAPAVERAGING = Field.create("DEBUGMAPAVERAGING", 807, FieldType.INT8, brain_pin_e); + public static final Field STARTERRELAYPIN = Field.create("STARTERRELAYPIN", 808, FieldType.INT8, brain_pin_e); + public static final Field STARTERRELAYPINMODE = Field.create("STARTERRELAYPINMODE", 809, FieldType.INT8, pin_output_mode_e); public static final Field MAPMINBUFFERLENGTH = Field.create("MAPMINBUFFERLENGTH", 812, FieldType.INT); public static final Field IDLEPIDDEACTIVATIONTPSTHRESHOLD = Field.create("IDLEPIDDEACTIVATIONTPSTHRESHOLD", 816, FieldType.INT16); public static final Field STEPPERPARKINGEXTRASTEPS = Field.create("STEPPERPARKINGEXTRASTEPS", 818, FieldType.INT16); @@ -1709,7 +1722,7 @@ public class Fields { public static final Field JOYSTICKCPIN = Field.create("JOYSTICKCPIN", 941, FieldType.INT8, brain_pin_e); public static final Field JOYSTICKDPIN = Field.create("JOYSTICKDPIN", 942, FieldType.INT8, brain_pin_e); public static final Field CONSOLEUARTDEVICE = Field.create("CONSOLEUARTDEVICE", 943, FieldType.INT8); - public static final String[] sensor_chart_e = {"none", "trigger", "MAP", "RPM ACCEL", "DETAILED RPM", "INVALID"}; + public static final String[] sensor_chart_e = {"none", "trigger", "MAP", "RPM ACCEL", "DETAILED RPM", "Fast Aux1", "INVALID", "INVALID"}; public static final Field SENSORCHARTMODE = Field.create("SENSORCHARTMODE", 944, FieldType.INT, sensor_chart_e); public static final String[] maf_sensor_type_e = {"v0", "v1", "v2", "v3"}; public static final Field MAFSENSORTYPE = Field.create("MAFSENSORTYPE", 948, FieldType.INT, maf_sensor_type_e); @@ -1733,9 +1746,17 @@ public class Fields { public static final Field CLUTCHUPPIN = Field.create("CLUTCHUPPIN", 969, FieldType.INT8, switch_input_pin_e); public static final Field FREQUENCYREPORTINGMAPINPUTPIN = Field.create("FREQUENCYREPORTINGMAPINPUTPIN", 970, FieldType.INT8, brain_input_pin_e); public static final Field CLUTCHUPPINMODE = Field.create("CLUTCHUPPINMODE", 971, FieldType.INT8); - public static final Field ETBIDLERANGE = Field.create("ETBIDLERANGE", 972, FieldType.FLOAT); - public static final Field CLUTCHUPPININVERTED = Field.create("CLUTCHUPPININVERTED", 976, FieldType.BIT, 0); - public static final Field CLUTCHDOWNPININVERTED = Field.create("CLUTCHDOWNPININVERTED", 976, FieldType.BIT, 1); + public static final Field UNUSED = Field.create("UNUSED", 972, FieldType.FLOAT); + public static final Field TODOCLUTCHUPPININVERTED = Field.create("TODOCLUTCHUPPININVERTED", 976, FieldType.BIT, 0); + public static final Field TODOCLUTCHDOWNPININVERTED = Field.create("TODOCLUTCHDOWNPININVERTED", 976, FieldType.BIT, 1); + public static final Field ETBIO1_DIRECTIONPIN1 = Field.create("ETBIO1_DIRECTIONPIN1", 980, FieldType.INT8, brain_pin_e); + public static final Field ETBIO1_DIRECTIONPIN2 = Field.create("ETBIO1_DIRECTIONPIN2", 981, FieldType.INT8, brain_pin_e); + public static final Field ETBIO1_CONTROLPIN1 = Field.create("ETBIO1_CONTROLPIN1", 982, FieldType.INT8, brain_pin_e); + public static final Field ETBIO1_CONTROLPINMODE = Field.create("ETBIO1_CONTROLPINMODE", 983, FieldType.INT8, pin_output_mode_e); + public static final Field ETBIO2_DIRECTIONPIN1 = Field.create("ETBIO2_DIRECTIONPIN1", 984, FieldType.INT8, brain_pin_e); + public static final Field ETBIO2_DIRECTIONPIN2 = Field.create("ETBIO2_DIRECTIONPIN2", 985, FieldType.INT8, brain_pin_e); + public static final Field ETBIO2_CONTROLPIN1 = Field.create("ETBIO2_CONTROLPIN1", 986, FieldType.INT8, brain_pin_e); + public static final Field ETBIO2_CONTROLPINMODE = Field.create("ETBIO2_CONTROLPINMODE", 987, FieldType.INT8, pin_output_mode_e); public static final Field VVTDISPLAYINVERTED = Field.create("VVTDISPLAYINVERTED", 1464, FieldType.BIT, 0); public static final Field FUELCLOSEDLOOPCORRECTIONENABLED = Field.create("FUELCLOSEDLOOPCORRECTIONENABLED", 1464, FieldType.BIT, 1); public static final Field ISVERBOSEIAC = Field.create("ISVERBOSEIAC", 1464, FieldType.BIT, 2); @@ -1794,7 +1815,7 @@ public class Fields { public static final Field USEADVANCECORRECTIONSFORCRANKING = Field.create("USEADVANCECORRECTIONSFORCRANKING", 1476, FieldType.BIT, 18); public static final Field USETPSADVANCETABLE = Field.create("USETPSADVANCETABLE", 1476, FieldType.BIT, 19); public static final Field ETBCALIBRATIONONSTART = Field.create("ETBCALIBRATIONONSTART", 1476, FieldType.BIT, 20); - public static final Field UNUSED_1484_BIT_21 = Field.create("UNUSED_1484_BIT_21", 1476, FieldType.BIT, 21); + public static final Field USEIACPIDMULTTABLE = Field.create("USEIACPIDMULTTABLE", 1476, FieldType.BIT, 21); public static final Field UNUSED_1484_BIT_22 = Field.create("UNUSED_1484_BIT_22", 1476, FieldType.BIT, 22); public static final Field UNUSED_1484_BIT_23 = Field.create("UNUSED_1484_BIT_23", 1476, FieldType.BIT, 23); public static final Field UNUSED_1484_BIT_24 = Field.create("UNUSED_1484_BIT_24", 1476, FieldType.BIT, 24); @@ -1857,6 +1878,8 @@ public class Fields { public static final Field FUELRAILPRESSURE = Field.create("FUELRAILPRESSURE", 1756, FieldType.FLOAT); public static final Field ALTERNATOR_DERIVATIVEFILTERLOSS = Field.create("ALTERNATOR_DERIVATIVEFILTERLOSS", 1760, FieldType.FLOAT); public static final Field ALTERNATOR_ANTIWINDUPFREQ = Field.create("ALTERNATOR_ANTIWINDUPFREQ", 1764, FieldType.FLOAT); + public static final Field TPS2MIN = Field.create("TPS2MIN", 1768, FieldType.INT16); + public static final Field TPS2MAX = Field.create("TPS2MAX", 1770, FieldType.INT16); public static final Field MAPERRORDETECTIONTOOLOW = Field.create("MAPERRORDETECTIONTOOLOW", 1776, FieldType.FLOAT); public static final Field MAPERRORDETECTIONTOOHIGH = Field.create("MAPERRORDETECTIONTOOHIGH", 1780, FieldType.FLOAT); public static final Field STEP1RPMWINDOW = Field.create("STEP1RPMWINDOW", 1784, FieldType.INT); @@ -2073,10 +2096,6 @@ public class Fields { public static final Field ETB_ITERMMIN = Field.create("ETB_ITERMMIN", 3956, FieldType.INT16); public static final Field ETB_ITERMMAX = Field.create("ETB_ITERMMAX", 3958, FieldType.INT16); public static final Field ETBDEADBAND = Field.create("ETBDEADBAND", 3960, FieldType.FLOAT); - public static final Field ETB2_DIRECTIONPIN1 = Field.create("ETB2_DIRECTIONPIN1", 3964, FieldType.INT8, brain_pin_e); - public static final Field ETB2_DIRECTIONPIN2 = Field.create("ETB2_DIRECTIONPIN2", 3965, FieldType.INT8, brain_pin_e); - public static final Field ETB2_CONTROLPIN1 = Field.create("ETB2_CONTROLPIN1", 3966, FieldType.INT8, brain_pin_e); - public static final Field ETB2_CONTROLPINMODE = Field.create("ETB2_CONTROLPINMODE", 3967, FieldType.INT8, pin_output_mode_e); public static final Field IDLETIMINGPID_PFACTOR = Field.create("IDLETIMINGPID_PFACTOR", 3968, FieldType.FLOAT); public static final Field IDLETIMINGPID_IFACTOR = Field.create("IDLETIMINGPID_IFACTOR", 3972, FieldType.FLOAT); public static final Field IDLETIMINGPID_DFACTOR = Field.create("IDLETIMINGPID_DFACTOR", 3976, FieldType.FLOAT); @@ -2097,6 +2116,10 @@ public class Fields { public static final Field IDLERPMPID_ITERMMAX = Field.create("IDLERPMPID_ITERMMAX", 4006, FieldType.INT16); public static final Field MC33972SPIDEVICE = Field.create("MC33972SPIDEVICE", 4008, FieldType.INT8); public static final Field ETBIDLETHROTTLERANGE = Field.create("ETBIDLETHROTTLERANGE", 4012, FieldType.FLOAT); + public static final Field TRIGGERCOMPCENTERVOLT = Field.create("TRIGGERCOMPCENTERVOLT", 4036, FieldType.INT8); + public static final Field TRIGGERCOMPHYSTMIN = Field.create("TRIGGERCOMPHYSTMIN", 4037, FieldType.INT8); + public static final Field TRIGGERCOMPHYSTMAX = Field.create("TRIGGERCOMPHYSTMAX", 4038, FieldType.INT8); + public static final Field TRIGGERCOMPSENSORSATRPM = Field.create("TRIGGERCOMPSENSORSATRPM", 4039, FieldType.INT8); public static final Field IDLERPMPID2_PFACTOR = Field.create("IDLERPMPID2_PFACTOR", 4040, FieldType.FLOAT); public static final Field IDLERPMPID2_IFACTOR = Field.create("IDLERPMPID2_IFACTOR", 4044, FieldType.FLOAT); public static final Field IDLERPMPID2_DFACTOR = Field.create("IDLERPMPID2_DFACTOR", 4048, FieldType.FLOAT); @@ -2151,8 +2174,8 @@ public class Fields { USEBIQUADANALOGFILTERING, CJ125ISUADIVIDED, CJ125ISLSU49, - ETB1_USE_TWO_WIRES, - ETB2_USE_TWO_WIRES, + ETB_USE_TWO_WIRES, + UNUSEDHEREO_WIRES, SHOWSDCARDWARNING, CJ125ISURDIVIDED, USETLE8888_HALL_MODE, @@ -2333,10 +2356,7 @@ public class Fields { DIGITALPOTENTIOMETERSPIDEVICE, MC33972_CS, MC33972_CSPINMODE, - ETB1_DIRECTIONPIN1, - ETB1_DIRECTIONPIN2, - ETB1_CONTROLPIN1, - ETB1_CONTROLPINMODE, + AUXFASTSENSOR1_ADCCHANNEL, FUELLEVELEMPTYTANKVOLTAGE, FUELLEVELFULLTANKVOLTAGE, AFR_TYPE, @@ -2450,7 +2470,9 @@ public class Fields { MAX31855_CS8, SDCARDPERIODMS, DEBUGSETTIMER, - UNUSEDSPIPADDING2, + DEBUGMAPAVERAGING, + STARTERRELAYPIN, + STARTERRELAYPINMODE, MAPMINBUFFERLENGTH, IDLEPIDDEACTIVATIONTPSTHRESHOLD, STEPPERPARKINGEXTRASTEPS, @@ -2530,9 +2552,17 @@ public class Fields { CLUTCHUPPIN, FREQUENCYREPORTINGMAPINPUTPIN, CLUTCHUPPINMODE, - ETBIDLERANGE, - CLUTCHUPPININVERTED, - CLUTCHDOWNPININVERTED, + UNUSED, + TODOCLUTCHUPPININVERTED, + TODOCLUTCHDOWNPININVERTED, + ETBIO1_DIRECTIONPIN1, + ETBIO1_DIRECTIONPIN2, + ETBIO1_CONTROLPIN1, + ETBIO1_CONTROLPINMODE, + ETBIO2_DIRECTIONPIN1, + ETBIO2_DIRECTIONPIN2, + ETBIO2_CONTROLPIN1, + ETBIO2_CONTROLPINMODE, VVTDISPLAYINVERTED, FUELCLOSEDLOOPCORRECTIONENABLED, ISVERBOSEIAC, @@ -2591,7 +2621,7 @@ public class Fields { USEADVANCECORRECTIONSFORCRANKING, USETPSADVANCETABLE, ETBCALIBRATIONONSTART, - UNUSED_1484_BIT_21, + USEIACPIDMULTTABLE, UNUSED_1484_BIT_22, UNUSED_1484_BIT_23, UNUSED_1484_BIT_24, @@ -2654,6 +2684,8 @@ public class Fields { FUELRAILPRESSURE, ALTERNATOR_DERIVATIVEFILTERLOSS, ALTERNATOR_ANTIWINDUPFREQ, + TPS2MIN, + TPS2MAX, MAPERRORDETECTIONTOOLOW, MAPERRORDETECTIONTOOHIGH, STEP1RPMWINDOW, @@ -2865,10 +2897,6 @@ public class Fields { ETB_ITERMMIN, ETB_ITERMMAX, ETBDEADBAND, - ETB2_DIRECTIONPIN1, - ETB2_DIRECTIONPIN2, - ETB2_CONTROLPIN1, - ETB2_CONTROLPINMODE, IDLETIMINGPID_PFACTOR, IDLETIMINGPID_IFACTOR, IDLETIMINGPID_DFACTOR, @@ -2889,6 +2917,10 @@ public class Fields { IDLERPMPID_ITERMMAX, MC33972SPIDEVICE, ETBIDLETHROTTLERANGE, + TRIGGERCOMPCENTERVOLT, + TRIGGERCOMPHYSTMIN, + TRIGGERCOMPHYSTMAX, + TRIGGERCOMPSENSORSATRPM, IDLERPMPID2_PFACTOR, IDLERPMPID2_IFACTOR, IDLERPMPID2_DFACTOR, diff --git a/java_console/models/src/com/rusefi/test/ParserTest.java b/java_console/models/src/com/rusefi/test/ReversePolishNotationParserTest.java similarity index 99% rename from java_console/models/src/com/rusefi/test/ParserTest.java rename to java_console/models/src/com/rusefi/test/ReversePolishNotationParserTest.java index 74be6244d7..d2b6653cc5 100644 --- a/java_console/models/src/com/rusefi/test/ParserTest.java +++ b/java_console/models/src/com/rusefi/test/ReversePolishNotationParserTest.java @@ -14,7 +14,7 @@ import static org.junit.Assert.fail; * @see DoubleEvaluator * @see Operator */ -public class ParserTest { +public class ReversePolishNotationParserTest { @Test public void testFunctionParameters() { assertParseB("3 log", "log(3)"); diff --git a/java_console/models/src/com/rusefi/tracing/Entry.java b/java_console/models/src/com/rusefi/tracing/Entry.java new file mode 100644 index 0000000000..535f71a211 --- /dev/null +++ b/java_console/models/src/com/rusefi/tracing/Entry.java @@ -0,0 +1,132 @@ +package com.rusefi.tracing; + +import java.io.ByteArrayInputStream; +import java.io.DataInputStream; +import java.io.EOFException; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import static com.rusefi.tracing.EnumNames.TypeNames; + +public class Entry { + // todo: maybe convert on firmware side so that CPU MHz are not accounted for on the java side? + private static final double MAGIC_NT = 168.0; + private final String name; + private final Phase phase; + private double timestampSeconds; + + public Entry(String name, Phase phase, double timestampSeconds) { + this.name = name; + this.phase = phase; + this.timestampSeconds = timestampSeconds; + } + + private static void AppendKeyValuePair(StringBuilder sb, String x, String y) { + sb.append('"'); + sb.append(x); + sb.append("\":\""); + sb.append(y); + sb.append('"'); + } + + private static void AppendKeyValuePair(StringBuilder sb, String x, int y) { + sb.append('"'); + sb.append(x); + sb.append("\":"); + sb.append(y); + } + + private static void AppendKeyValuePair(StringBuilder sb, String x, double y) { + sb.append('"'); + sb.append(x); + sb.append("\":"); + sb.append(y); + } + + public static int readInt(DataInputStream in) throws IOException { + int ch1 = in.read(); + int ch2 = in.read(); + int ch3 = in.read(); + int ch4 = in.read(); + if ((ch1 | ch2 | ch3 | ch4) < 0) + throw new EOFException(); + return ((ch4 << 24) + (ch3 << 16) + (ch2 << 8) + (ch1 << 0)); + } + + + public static List parseBuffer(byte[] packet) { + List result = new ArrayList<>(); + double minValue = Double.MAX_VALUE; + try { + DataInputStream is = new DataInputStream(new ByteArrayInputStream(packet)); + is.readByte(); // skip TS result code + int firstTimeStamp = 0; + for (int i = 0; i < packet.length - 1; i += 8) { + byte type = is.readByte(); + byte phase = is.readByte(); + byte data = is.readByte(); + byte thread = is.readByte(); + + int timestampNt = readInt(is); + if (i == 0) { + firstTimeStamp = timestampNt; + } else { + if (timestampNt < firstTimeStamp) { + System.out.println("Dropping the remainder of the packet at " + i + " due to " + + timestampNt + " below " + firstTimeStamp); + break; + } + } + + + double timestampSeconds = timestampNt / MAGIC_NT; + minValue = Math.min(minValue, timestampSeconds); + String name; + if (type == 1) { + name = "ISR: " + thread; + } + else + { + name = TypeNames[type]; + } + + Entry e = new Entry(name, Phase.decode(phase), timestampSeconds); + result.add(e); + } + + for (Entry e : result) + e.adjustTimestamp(minValue); + + + } catch (IOException e) { + throw new IllegalStateException(e); + } + return result; + } + + private void adjustTimestamp(double minValue) { + timestampSeconds -= minValue; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + + sb.append("{"); + AppendKeyValuePair(sb, "name", name); + + sb.append(","); + AppendKeyValuePair(sb, "ph", phase.toString()); + sb.append(","); + AppendKeyValuePair(sb, "tid", 0); + sb.append(","); + + AppendKeyValuePair(sb, "pid", 0); + sb.append(","); + AppendKeyValuePair(sb, "ts", timestampSeconds); + sb.append("}"); + + return sb.toString(); + } +} diff --git a/java_console/models/src/com/rusefi/tracing/EnumNames.java b/java_console/models/src/com/rusefi/tracing/EnumNames.java new file mode 100644 index 0000000000..7d7ce009e9 --- /dev/null +++ b/java_console/models/src/com/rusefi/tracing/EnumNames.java @@ -0,0 +1,45 @@ +package com.rusefi.tracing; + +public class EnumNames { + public static final String[] TypeNames = { + "INVALID", + "ISR", + "ContextSwitch", + "OutputPinSetValue", + "DecodeTriggerEvent", + "EnginePeriodicFastCallback", + "EnginePeriodicSlowCallback", + "EngineStatePeriodicFastCallback", + "HandleShaftSignal", + "EventQueueInsertTask", + "EventQueueExecuteAll", + "SingleTimerExecutorDoExecute", + "SingleTimerExecutorScheduleTimerCallback", + "PeriodicControllerPeriodicTask", + "PeriodicTimerControllerPeriodicTask", + "AdcCallbackFast", + "AdcCallbackSlow", + "AdcConversionSlow", + "AdcConversionFast", + "AdcSubscriptionUpdateSubscribers", + "GetRunningFuel", + "GetInjectionDuration", + "HandleFuel", + "MainTriggerCallback", + "OnTriggerEventSparkLogic", + "ShaftPositionListeners", + "GetBaseFuel", + "GetTpsEnrichment", + "GetSpeedDensityFuel", + "WallFuelAdjust", + "MapAveragingTriggerCallback", + "AdcCallbackFastComplete", + "SingleTimerExecutorScheduleByTimestamp", + "ScheduleByAngle", + "EventQueueExecuteCallback", + "PwmGeneratorCallback", + "TunerStudioHandleCrcCommand", + "PwmConfigTogglePwmState", + "PwmConfigStateChangeCallback", + }; +} diff --git a/java_console/models/src/com/rusefi/tracing/JsonOutput.java b/java_console/models/src/com/rusefi/tracing/JsonOutput.java new file mode 100644 index 0000000000..1858a9b9ad --- /dev/null +++ b/java_console/models/src/com/rusefi/tracing/JsonOutput.java @@ -0,0 +1,66 @@ +package com.rusefi.tracing; + +import java.io.*; +import java.util.Arrays; +import java.util.List; + +/** + * This class helps to write JSON files readable by chrome://tracing/ + *

+ * See https://github.com/catapult-project/catapult/blob/master/tracing/README.md + * @see PerfTraceTool + */ +public class JsonOutput { + + /** + * those are special entries that change display settings + * those set thread names and sort index based on those thread IDs + * (those thread IDs are interrupt numbers, and the name is the name of the interrupt handler) + */ + private static final String FORMATTING_SETTINGS + = "{\"name\":\"thread_name\",\"ph\":\"M\",\"tid\":18,\"pid\":0,\"args\":{\"name\":\"ADC\"}}," + + "{\"name\":\"thread_name\",\"ph\":\"M\",\"tid\":29,\"pid\":0,\"args\":{\"name\":\"TIM3\"}}," + + "{\"name\":\"thread_name\",\"ph\":\"M\",\"tid\":30,\"pid\":0,\"args\":{\"name\":\"TIM4\"}}," + + "{\"name\":\"thread_name\",\"ph\":\"M\",\"tid\":44,\"pid\":0,\"args\":{\"name\":\"TIM8/13\"}}," + + "{\"name\":\"thread_name\",\"ph\":\"M\",\"tid\":50,\"pid\":0,\"args\":{\"name\":\"TIM5\"}}," + + "{\"name\":\"thread_name\",\"ph\":\"M\",\"tid\":58,\"pid\":0,\"args\":{\"name\":\"DMA2s2\"}}," + + "{\"name\":\"thread_name\",\"ph\":\"M\",\"tid\":60,\"pid\":0,\"args\":{\"name\":\"DMA2s4\"}}," + + "{\"name\":\"thread_name\",\"ph\":\"M\",\"tid\":67,\"pid\":0,\"args\":{\"name\":\"USB\"}}," + + "{\"name\":\"thread_sort_index\",\"ph\":\"M\",\"tid\":18,\"pid\":0,\"args\":{\"sort_index\":4}}," + + "{\"name\":\"thread_sort_index\",\"ph\":\"M\",\"tid\":29,\"pid\":0,\"args\":{\"sort_index\":2}}," + + "{\"name\":\"thread_sort_index\",\"ph\":\"M\",\"tid\":30,\"pid\":0,\"args\":{\"sort_index\":5}}," + + "{\"name\":\"thread_sort_index\",\"ph\":\"M\",\"tid\":44,\"pid\":0,\"args\":{\"sort_index\":7}}," + + "{\"name\":\"thread_sort_index\",\"ph\":\"M\",\"tid\":50,\"pid\":0,\"args\":{\"sort_index\":3}}," + + "{\"name\":\"thread_sort_index\",\"ph\":\"M\",\"tid\":58,\"pid\":0,\"args\":{\"sort_index\":6}}," + + "{\"name\":\"thread_sort_index\",\"ph\":\"M\",\"tid\":60,\"pid\":0,\"args\":{\"sort_index\":8}}," + + "{\"name\":\"thread_sort_index\",\"ph\":\"M\",\"tid\":67,\"pid\":0,\"args\":{\"sort_index\":9}}" + ; + private static final String EOL = "\r\n"; + + public static void main(String[] args) throws IOException { + List testEntries = Arrays.asList( + new Entry("hello", Phase.B, 0.1), + new Entry("hello2", Phase.B, 0.2), + new Entry("hello2", Phase.E, 0.3), + new Entry("hello", Phase.E, 0.4) + ); + + writeToStream(testEntries, new FileOutputStream("hello_trace.json")); + } + + public static void writeToStream(List testEntries, OutputStream outputStream) throws IOException { + + Writer out = new OutputStreamWriter(outputStream); + out.write("{\"traceEvents\": [" + EOL); + + out.write(FORMATTING_SETTINGS + EOL); + + for (Entry e : testEntries) { + out.write(","); + out.write(e.toString() + EOL); + } + + out.write("]}"); + out.close(); + } +} diff --git a/java_console/models/src/com/rusefi/tracing/Phase.java b/java_console/models/src/com/rusefi/tracing/Phase.java new file mode 100644 index 0000000000..e98febf992 --- /dev/null +++ b/java_console/models/src/com/rusefi/tracing/Phase.java @@ -0,0 +1,24 @@ +package com.rusefi.tracing; + +public enum Phase { + // Begin + B, + // End + E, + i, + ; + + public static Phase decode(byte phase) { + switch (phase) { + case 0: + return B; + case 1: + return E; + case 2: + case 3: + return i; + default: + throw new IllegalStateException("Unexpected " + phase); + } + } +} diff --git a/java_console/models/src/com/rusefi/tracing/test/EntryTest.java b/java_console/models/src/com/rusefi/tracing/test/EntryTest.java new file mode 100644 index 0000000000..9f826f1343 --- /dev/null +++ b/java_console/models/src/com/rusefi/tracing/test/EntryTest.java @@ -0,0 +1,17 @@ +package com.rusefi.tracing.test; + +import com.rusefi.tracing.Entry; +import com.rusefi.tracing.Phase; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class EntryTest { + @Test + public void testToString() { + Entry e = new Entry("hello", Phase.E, 0.1); + + assertEquals("{\"name\":\"hello\",\"ph\":\"E\",\"tid\":0,\"pid\":0,\"ts\":0.1}", e.toString()); + + } +} diff --git a/java_console/ui/src/com/rusefi/BenchTestPane.java b/java_console/ui/src/com/rusefi/BenchTestPane.java index 66180e53d1..325c0eba5b 100644 --- a/java_console/ui/src/com/rusefi/BenchTestPane.java +++ b/java_console/ui/src/com/rusefi/BenchTestPane.java @@ -1,13 +1,26 @@ package com.rusefi; +import com.rusefi.binaryprotocol.BinaryProtocol; +import com.rusefi.binaryprotocol.BinaryProtocolHolder; import com.rusefi.config.generated.Fields; +import com.rusefi.tracing.Entry; +import com.rusefi.tracing.JsonOutput; import com.rusefi.ui.MessagesView; +import com.rusefi.ui.RpmModel; +import com.rusefi.ui.util.UiUtils; import org.jetbrains.annotations.NotNull; import javax.swing.*; import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.List; import static com.rusefi.CommandControl.TEST; +import static com.rusefi.binaryprotocol.BinaryProtocolCommands.RESPONSE_OK; +import static com.rusefi.binaryprotocol.IoHelper.checkResponseCode; public class BenchTestPane { private final JPanel content = new JPanel(new GridLayout(2, 5)); @@ -15,6 +28,7 @@ public class BenchTestPane { public BenchTestPane() { content.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20)); + content.add(grabPerformanceTrace()); content.add(createFanTest()); content.add(createAcRelayTest()); content.add(createFuelPumpTest()); @@ -38,6 +52,36 @@ public class BenchTestPane { content.add(new MessagesView().messagesScroll); } + private Component grabPerformanceTrace() { + JButton button = new JButton("Grab PTrace"); + button.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + BinaryProtocol bp = BinaryProtocolHolder.INSTANCE.get(); + bp.executeCommand(new byte[]{'r'}, "begin trace", false); + + try { + Thread.sleep(500); + + byte[] packet = bp.executeCommand(new byte[]{'b'}, "get trace", true); + if (!checkResponseCode(packet, RESPONSE_OK) || ((packet.length - 1) % 8) != 0) + throw new IllegalStateException("Unexpected packet"); + + List data = Entry.parseBuffer(packet); + + int rpm = RpmModel.getInstance().getValue(); + String fileName = FileLog.getDate() + "_rpm_" + rpm + "_rusEfi_trace" + ".json"; + + + JsonOutput.writeToStream(data, new FileOutputStream(fileName)); + } catch (IOException | InterruptedException e1) { + throw new IllegalStateException(e1); + } + } + }); + return UiUtils.wrap(button); + } + private Component createMILTest() { CommandControl panel = new CommandControl("MIL", "check_engine.jpg", TEST) { @NotNull diff --git a/java_console/ui/src/com/rusefi/Launcher.java b/java_console/ui/src/com/rusefi/Launcher.java index 28bcf4aff5..f15db788ad 100644 --- a/java_console/ui/src/com/rusefi/Launcher.java +++ b/java_console/ui/src/com/rusefi/Launcher.java @@ -29,6 +29,7 @@ import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import java.awt.*; import java.awt.event.ActionListener; +import java.io.IOException; import java.util.Arrays; import java.util.HashMap; import java.util.Map; @@ -48,17 +49,21 @@ import static com.rusefi.ui.storage.PersistentConfiguration.getConfig; * @see EngineSnifferPanel */ public class Launcher { - public static final int CONSOLE_VERSION = 20191105; + public static final int CONSOLE_VERSION = 20191201; public static final String INI_FILE_PATH = System.getProperty("ini_file_path", ".."); public static final String INPUT_FILES_PATH = System.getProperty("input_files_path", ".."); public static final String TOOLS_PATH = System.getProperty("tools_path", "."); private static final String TAB_INDEX = "main_tab"; protected static final String PORT_KEY = "port"; protected static final String SPEED_KEY = "speed"; + private static final String TOOL_NAME_COMPILE_FSIO_FILE = "compile_fsio_file"; private static final String TOOL_NAME_REBOOT_ECU = "reboot_ecu"; + private static final String TOOL_NAME_FIRING_ORDER = "firing_order"; + private static final String TOOL_NAME_PERF_ENUMS = "ptrace_enums"; // todo: rename to something more FSIO-specific? would need to update documentation somewhere private static final String TOOL_NAME_COMPILE = "compile"; + private final String port; // todo: the logic around 'fatalError' could be implemented nicer private String fatalError; @@ -316,43 +321,37 @@ public class Launcher { */ public static void main(final String[] args) throws Exception { String toolName = args.length == 0 ? null : args[0]; + if (TOOL_NAME_COMPILE_FSIO_FILE.equalsIgnoreCase(toolName)) { - /** - * re-packaging array which contains input and output file names - */ - int returnCode = CompileTool.run(Arrays.asList(args).subList(1, args.length)); + int returnCode = invokeCompileFileTool(args); System.exit(returnCode); - return; } if (TOOL_NAME_COMPILE.equals(toolName)) { - if (args.length != 2) { - System.err.println("input expression parameter expected"); - System.exit(-1); - return; - } - String input = args[1]; - System.out.println(DoubleEvaluator.process(input).getPosftfixExpression()); + invokeCompileExpressionTool(args); System.exit(0); } - System.out.println("Optional tools: " + Arrays.asList(TOOL_NAME_COMPILE_FSIO_FILE, TOOL_NAME_COMPILE, TOOL_NAME_REBOOT_ECU)); + + if (TOOL_NAME_FIRING_ORDER.equals(toolName)) { + FiringOrderTSLogic.invoke(args[1]); + System.exit(0); + } + + if (TOOL_NAME_PERF_ENUMS.equals(toolName)) { + PerfTraceTool.readPerfTrace(args[1], args[2], args[3], args[4]); + System.exit(0); + } + + System.out.println("Optional tools: " + Arrays.asList(TOOL_NAME_COMPILE_FSIO_FILE, + TOOL_NAME_COMPILE, + TOOL_NAME_REBOOT_ECU, + TOOL_NAME_FIRING_ORDER)); System.out.println("Starting rusEfi UI console " + CONSOLE_VERSION); FileLog.MAIN.start(); if (TOOL_NAME_REBOOT_ECU.equalsIgnoreCase(toolName)) { - String autoDetectedPort = PortDetector.autoDetectPort(null); - if (autoDetectedPort == null) { - System.err.println("rusEfi not detected"); - return; - } - PortHolder.EstablishConnection establishConnection = new PortHolder.EstablishConnection(autoDetectedPort).invoke(); - if (!establishConnection.isConnected()) - return; - IoStream stream = establishConnection.getStream(); - byte[] commandBytes = BinaryProtocol.getTextCommandBytes(Fields.CMD_REBOOT); - stream.sendPacket(commandBytes, FileLog.LOGGER); - + invokeRebootTool(); return; } @@ -368,6 +367,36 @@ public class Launcher { }); } + private static int invokeCompileFileTool(String[] args) throws IOException { + /** + * re-packaging array which contains input and output file names + */ + return CompileTool.run(Arrays.asList(args).subList(1, args.length)); + } + + private static void invokeRebootTool() throws IOException { + String autoDetectedPort = PortDetector.autoDetectPort(null); + if (autoDetectedPort == null) { + System.err.println("rusEfi not detected"); + return; + } + PortHolder.EstablishConnection establishConnection = new PortHolder.EstablishConnection(autoDetectedPort).invoke(); + if (!establishConnection.isConnected()) + return; + IoStream stream = establishConnection.getStream(); + byte[] commandBytes = BinaryProtocol.getTextCommandBytes(Fields.CMD_REBOOT); + stream.sendPacket(commandBytes, FileLog.LOGGER); + } + + private static void invokeCompileExpressionTool(String[] args) { + if (args.length != 2) { + System.err.println("input expression parameter expected"); + System.exit(-1); + } + String expression = args[1]; + System.out.println(DoubleEvaluator.process(expression).getPosftfixExpression()); + } + private static void awtCode(String[] args) { if (JustOneInstance.isAlreadyRunning()) { int result = JOptionPane.showConfirmDialog(null, "Looks like another instance is already running. Do you really want to start another instance?", diff --git a/java_console/ui/src/com/rusefi/PresetsPane.java b/java_console/ui/src/com/rusefi/PresetsPane.java index 69899b994c..5d583410ec 100644 --- a/java_console/ui/src/com/rusefi/PresetsPane.java +++ b/java_console/ui/src/com/rusefi/PresetsPane.java @@ -1,5 +1,6 @@ package com.rusefi; +import com.rusefi.config.generated.Fields; import com.rusefi.io.CommandQueue; import org.jetbrains.annotations.NotNull; @@ -40,7 +41,7 @@ public class PresetsPane { private final String labelTest; public SetEngineTypeCommandControl(String labelTest, String imageFileName, int engineType) { - super(labelTest, imageFileName, CommandControl.SET, "set engine_type " + engineType); + super(labelTest, imageFileName, CommandControl.SET, "set " + Fields.CMD_ENGINE_TYPE + " " + engineType); this.labelTest = labelTest; } diff --git a/java_console/ui/src/com/rusefi/ui/GaugesPanel.java b/java_console/ui/src/com/rusefi/ui/GaugesPanel.java index 61adf3cb8a..1ee27430aa 100644 --- a/java_console/ui/src/com/rusefi/ui/GaugesPanel.java +++ b/java_console/ui/src/com/rusefi/ui/GaugesPanel.java @@ -244,7 +244,9 @@ public class GaugesPanel { gauges.setLayout(rows, columns); for (int i = 0; i < rows * columns; i++) { - Component element = GaugesGridElement.read(config.getChild("element_" + i), DEFAULT_LAYOUT[i]); + // sometimes grid is quite large so we shall be careful with default sensor index + Sensor defaultSensor = DEFAULT_LAYOUT[Math.min(i, DEFAULT_LAYOUT.length - 1)]; + Component element = GaugesGridElement.read(config.getChild("element_" + i), defaultSensor); gauges.panel.add(element); } diff --git a/java_console/ui/src/com/rusefi/ui/storage/Node.java b/java_console/ui/src/com/rusefi/ui/storage/Node.java index 64eaeb1de2..2c8a9a7512 100644 --- a/java_console/ui/src/com/rusefi/ui/storage/Node.java +++ b/java_console/ui/src/com/rusefi/ui/storage/Node.java @@ -36,6 +36,7 @@ public class Node { return true; } + @NotNull public Node getChild(String name) { Node child = (Node) config.get(name); if (child == null) { diff --git a/misc/jenkins/compile_other_versions/prepare_bundle.bat b/misc/jenkins/compile_other_versions/prepare_bundle.bat index c6fee5afe0..621ac9211b 100644 --- a/misc/jenkins/compile_other_versions/prepare_bundle.bat +++ b/misc/jenkins/compile_other_versions/prepare_bundle.bat @@ -1,5 +1,6 @@ set script_name=build_version.bat echo Entering %script_name% with %bundle_name% +echo "RUSEFI_BUILD_FTP_USER=%RUSEFI_BUILD_FTP_USER%" if %RUSEFI_BUILD_FTP_USER%.==. ( echo RUSEFI_BUILD_FTP_USER not set - not packaging @@ -18,8 +19,6 @@ set folder=temp\%folder% echo Packaging temp\rusefi_bundle.zip file call misc\jenkins\build_working_folder.bat -rem TODO: extract FTP duplication with 407 build - cd temp set bundle_file=rusefi_bundle_%bundle_name%.zip mv rusefi_bundle.zip %bundle_file% diff --git a/misc/jenkins/compile_other_versions/run.bat b/misc/jenkins/compile_other_versions/run.bat index d0fc64e535..5aa0c82a1a 100644 --- a/misc/jenkins/compile_other_versions/run.bat +++ b/misc/jenkins/compile_other_versions/run.bat @@ -1,5 +1,6 @@ set script_name=run.bat echo Entering %script_name% +echo "RUSEFI_BUILD_FTP_USER=%RUSEFI_BUILD_FTP_USER%" pwd @@ -9,6 +10,10 @@ if not exist java_console_binary/rusefi_console.jar exit -1 call misc\jenkins\build_simulator.bat if not exist simulator/build/rusefi_simulator.exe exit -1 +call misc\jenkins\compile_other_versions\compile_and_upload.bat kinetis kinetis +IF NOT ERRORLEVEL 0 echo ERROR invoking compile_and_upload.bat +IF NOT ERRORLEVEL 0 EXIT /B 1 + call misc\jenkins\compile_other_versions\compile_and_upload.bat frankenso frankenso_na6 IF NOT ERRORLEVEL 0 echo ERROR invoking compile_and_upload.bat IF NOT ERRORLEVEL 0 EXIT /B 1 diff --git a/simulator/Makefile b/simulator/Makefile index b221a477a8..50a11c8764 100644 --- a/simulator/Makefile +++ b/simulator/Makefile @@ -18,6 +18,8 @@ RULESPATH = $(CHIBIOS)/os/common/startup/SIMIA32/compilers/GCC RULESFILE = $(RULESPATH)/rules.mk include ../firmware/rusefi.mk +RULESFILE = ../firmware/rusefi_rules.mk + # Compiler options here. @@ -28,7 +30,7 @@ ifeq ($(USE_OPT),) # this config producec a smaller binary file # 7.3 compiler would want -Wno-error=implicit-fallthrough while 6.4 does not know about it # see https://github.com/rusefi/rusefi/issues/517 - USE_OPT = -Wall -O2 -Wno-error=implicit-fallthrough -Werror-implicit-function-declaration -Werror -Wno-error=pointer-sign -Wno-error=unused-function -Wno-error=unused-variable -Wno-error=sign-compare -Wno-error=unused-parameter -Werror=missing-field-initializers -Wno-error=write-strings -Wno-error=strict-aliasing + USE_OPT = -Wall -O2 -Wno-error=implicit-fallthrough -Wno-error=write-strings -Wno-error=strict-aliasing ifeq ($(OS),Windows_NT) else @@ -36,6 +38,8 @@ ifeq ($(USE_OPT),) endif endif +USE_OPT += $(RUSEFI_OPT) + ifeq ($(CCACHE_DIR),) $(info No CCACHE_DIR) else @@ -121,12 +125,6 @@ include $(PROJECT_DIR)/console/binary/tunerstudio.mk include $(PROJECT_DIR)/console/console.mk include $(PROJECT_DIR)/config/engines/engines.mk include $(PROJECT_DIR)/controllers/controllers.mk -include $(PROJECT_DIR)/controllers/algo/algo.mk -include $(PROJECT_DIR)/controllers/core/core.mk -include $(PROJECT_DIR)/controllers/math/math.mk -include $(PROJECT_DIR)/controllers/sensors/sensors.mk -include $(PROJECT_DIR)/controllers/trigger/trigger.mk -include $(PROJECT_DIR)/controllers/system/system.mk include $(PROJECT_DIR)/development/development.mk include $(PROJECT_DIR)/hw_layer/hw_layer.mk include $(PROJECT_DIR)/hw_layer/sensors/sensors.mk @@ -160,7 +158,7 @@ CPPSRC = $(UTILSRC_CPP) \ $(PROJECT_DIR)/development/sensor_chart.cpp \ $(PROJECT_DIR)/development/trigger_emulator.cpp \ $(HW_LAYER_EMS_CPP) \ - $(PROJECT_DIR)/hw_layer/sensors/cj125.cpp \ + $(HW_SENSORS_SRC) \ $(TRIGGER_SRC_CPP) \ $(TRIGGER_DECODERS_SRC_CPP) \ $(SYSTEMSRC_CPP) \ @@ -196,15 +194,12 @@ INCDIR = . \ $(PROJECT_DIR)/console/fl_binary \ $(PROJECT_DIR)/config/engines \ $(PROJECT_DIR)/ext_algo \ - $(PROJECT_DIR)/controllers \ - $(HW_LAYER_DRIVERS_INC) \ + $(HW_LAYER_DRIVERS_INC) \ $(PROJECT_DIR)/hw_layer \ $(PROJECT_DIR)/hw_layer/algo \ $(HW_SENSORS_INC) \ - $(CONTROLLERS_INC) \ $(DEVELOPMENT_DIR) \ - $(PROJECT_DIR)/controllers/sensors \ - $(PROJECT_DIR)/controllers/sensors/converters \ + $(CONTROLLERS_INC) \ ${CHIBIOS}/os/various \ $(CHIBIOS)/os/hal/lib/streams \ simulator diff --git a/simulator/simulator/efifeatures.h b/simulator/simulator/efifeatures.h index fe40bc75ec..94f57ab33d 100644 --- a/simulator/simulator/efifeatures.h +++ b/simulator/simulator/efifeatures.h @@ -87,7 +87,7 @@ #define EFI_ENGINE_CONTROL TRUE #define EFI_IDLE_CONTROL TRUE -#define EFI_IDLE_INCREMENTAL_PID_CIC FALSE +#define EFI_IDLE_PID_CIC FALSE #define EFI_MAIN_RELAY_CONTROL FALSE #define EFI_HIP_9011 TRUE #define EFI_CJ125 FALSE @@ -122,7 +122,7 @@ #define EFI_RTC FALSE #define EFI_MALFUNCTION_INDICATOR FALSE #define EFI_HD44780_LCD FALSE -#define EFI_WAVE_ANALYZER FALSE +#define EFI_LOGIC_ANALYZER FALSE #define EFI_PWM_TESTER FALSE #define TRIGGER_EXTREME_LOGGING FALSE #define SPARK_EXTREME_LOGGING FALSE diff --git a/unit_tests/Makefile b/unit_tests/Makefile index 96b9d5b552..54857e6cf7 100644 --- a/unit_tests/Makefile +++ b/unit_tests/Makefile @@ -14,6 +14,7 @@ endif PROJECT_DIR = ../firmware +include $(PROJECT_DIR)/rusefi_rules.mk # Compiler options here. ifeq ($(USE_OPT),) @@ -27,6 +28,11 @@ ifeq ($(USE_OPT),) USE_OPT += -Werror=missing-field-initializers endif + +#TODO! this is a nice goal +#USE_OPT += $(RUSEFI_OPT) +#USE_OPT += -Wno-error=format= -Wno-error=register -Wno-error=write-strings + ifeq ($(CCACHE_DIR),) $(info No CCACHE_DIR) else @@ -91,12 +97,6 @@ PROJECT = rusefi_test # Imported source files and paths include $(PROJECT_DIR)/config/engines/engines.mk include $(PROJECT_DIR)/controllers/controllers.mk -include $(PROJECT_DIR)/controllers/algo/algo.mk -include $(PROJECT_DIR)/controllers/core/core.mk -include $(PROJECT_DIR)/controllers/math/math.mk -include $(PROJECT_DIR)/controllers/system/system.mk -include $(PROJECT_DIR)/controllers/sensors/sensors.mk -include $(PROJECT_DIR)/controllers/trigger/trigger.mk include $(PROJECT_DIR)/development/development.mk include $(PROJECT_DIR)/hw_layer/hw_layer.mk include $(PROJECT_DIR)/hw_layer/drivers/drivers.mk @@ -170,8 +170,6 @@ INCDIR = . \ $(PROJECT_DIR)/config/engines \ $(CONTROLLERS_INC) \ $(PROJECT_DIR)/console \ - $(PROJECT_DIR)/controllers/sensors \ - $(PROJECT_DIR)/controllers/sensors/converters \ $(DEVELOPMENT_DIR) \ $(PROJECT_DIR)/ext_algo \ $(PROJECT_DIR)/hw_layer \ diff --git a/unit_tests/afm2mapConverter.cpp b/unit_tests/afm2mapConverter.cpp index 5777326f63..8e87c20316 100644 --- a/unit_tests/afm2mapConverter.cpp +++ b/unit_tests/afm2mapConverter.cpp @@ -57,7 +57,7 @@ void printConvertedTable() { printf("\n"); - setLinearCurve(PSI_BINS, ASIZE, PSI2KPA(18), PSI2KPA(-14.5), 0.1); // we invert PSI scale since voltage is inverted below + setLinearCurve(PSI_BINS, PSI2KPA(18), PSI2KPA(-14.5f), 0.1f); // we invert PSI scale since voltage is inverted below for (int i = 0; i< ASIZE;i++) { printf("%f, ", PSI_BINS[i]); } diff --git a/unit_tests/boards.cpp b/unit_tests/boards.cpp index 5350c8e223..9ce0f88998 100644 --- a/unit_tests/boards.cpp +++ b/unit_tests/boards.cpp @@ -24,8 +24,9 @@ float getVoltageDivided(const char *msg, adc_channel_e hwChannel DECLARE_ENGINE_ case TEST_IAT_CHANNEL: return testIatValue; //return adcToVolts(engine->engineState.mockAdcState.getMockAdcValue(hwChannel)); + default: + return adcToVolts(engine->engineState.mockAdcState.getMockAdcValue(hwChannel));; } - return adcToVolts(engine->engineState.mockAdcState.getMockAdcValue(hwChannel));; } float getVoltage(const char *msg, adc_channel_e hwChannel DECLARE_ENGINE_PARAMETER_SUFFIX) { diff --git a/unit_tests/engine_test_helper.cpp b/unit_tests/engine_test_helper.cpp index 609655eaf7..ae3e57da27 100644 --- a/unit_tests/engine_test_helper.cpp +++ b/unit_tests/engine_test_helper.cpp @@ -75,7 +75,7 @@ EngineTestHelper::EngineTestHelper(engine_type_e engineType, configuration_callb //todo: reuse initPeriodicEvents(PASS_ENGINE_PARAMETER_SIGNATURE) method engine->periodicSlowCallback(PASS_ENGINE_PARAMETER_SIGNATURE); - engine->eInitializeTriggerShape(NULL PASS_ENGINE_PARAMETER_SUFFIX); + engine->initializeTriggerWaveform(NULL PASS_ENGINE_PARAMETER_SUFFIX); initRpmCalculator(NULL PASS_ENGINE_PARAMETER_SUFFIX); initMainEventListener(NULL PASS_ENGINE_PARAMETER_SUFFIX); } @@ -128,7 +128,6 @@ void EngineTestHelper::fireTriggerEvents2(int count, float durationMs) { void EngineTestHelper::clearQueue() { engine.executor.executeAll(99999999); // this is needed to clear 'isScheduled' flag ASSERT_EQ( 0, engine.executor.size()) << "Failed to clearQueue"; - engine.ignitionEventsHead = nullptr; // let's drop whatever was scheduled just to start from a clean state } int EngineTestHelper::executeActions() { @@ -163,29 +162,63 @@ void EngineTestHelper::assertInjectorDownEvent(const char *msg, int eventIndex, scheduling_s * EngineTestHelper::assertEvent5(const char *msg, int index, void *callback, efitime_t expectedTimestamp) { TestExecutor *executor = &engine.executor; - EXPECT_TRUE(executor->size() > index) << msg; + EXPECT_TRUE(executor->size() > index) << msg << " valid index"; scheduling_s *event = executor->getForUnitTest(index); - assertEqualsM4(msg, " up/down", (void*)event->callback == (void*) callback, 1); + assertEqualsM4(msg, " callback up/down", (void*)event->action.getCallback() == (void*) callback, 1); efitime_t start = getTimeNowUs(); - assertEqualsM(msg, expectedTimestamp, event->momentX - start); + assertEqualsM4(msg, " timestamp", expectedTimestamp, event->momentX - start); return event; } +// todo: reduce code duplication with another 'getElementAtIndexForUnitText' +static AngleBasedEvent * getElementAtIndexForUnitText(int index, Engine *engine) { + AngleBasedEvent * current; + + LL_FOREACH2(engine->angleBasedEventsHead, current, nextToothEvent) + { + if (index == 0) + return current; + index--; + } +#if EFI_UNIT_TEST + firmwareError(OBD_PCM_Processor_Fault, "getForUnitText: null"); +#endif /* EFI_UNIT_TEST */ + return NULL; +} + +AngleBasedEvent * EngineTestHelper::assertTriggerEvent(const char *msg, + int index, AngleBasedEvent *expected, + void *callback, + int triggerEventIndex, angle_t angleOffsetFromTriggerEvent) { + AngleBasedEvent * event = getElementAtIndexForUnitText(index, &engine); + + assertEqualsM4(msg, " callback up/down", (void*)event->action.getCallback() == (void*) callback, 1); + + assertEqualsM4(msg, " trigger", triggerEventIndex, event->position.triggerEventIndex); + assertEqualsM4(msg, " angle", angleOffsetFromTriggerEvent, event->position.angleOffsetFromTriggerEvent); + return event; +} + +scheduling_s * EngineTestHelper::assertScheduling(const char *msg, int index, scheduling_s *expected, void *callback, efitime_t expectedTimestamp) { + scheduling_s * actual = assertEvent5(msg, index, callback, expectedTimestamp); + return actual; +} + void EngineTestHelper::assertEvent(const char *msg, int index, void *callback, efitime_t momentX, InjectionEvent *expectedEvent) { scheduling_s *event = assertEvent5(msg, index, callback, momentX); - InjectionEvent *actualEvent = (InjectionEvent *)event->param; + InjectionEvent *actualEvent = (InjectionEvent *)event->action.getArgument(); - assertEqualsLM(msg, expectedEvent->outputs[0], (long)actualEvent->outputs[0]); + assertEqualsLM(msg, (long)expectedEvent->outputs[0], (long)actualEvent->outputs[0]); // but this would not work assertEqualsLM(msg, expectedPair, (long)eventPair); } -void EngineTestHelper::applyTriggerShape() { +void EngineTestHelper::applyTriggerWaveform() { Engine *engine = &this->engine; EXPAND_Engine - ENGINE(eInitializeTriggerShape(NULL PASS_ENGINE_PARAMETER_SUFFIX)); + ENGINE(initializeTriggerWaveform(NULL PASS_ENGINE_PARAMETER_SUFFIX)); incrementGlobalConfigurationVersion(PASS_ENGINE_PARAMETER_SIGNATURE); } @@ -212,8 +245,8 @@ void setupSimpleTestEngineWithMaf(EngineTestHelper *eth, injection_mode_e inject // set cranking mode (it's used by getCurrentInjectionMode()) engineConfiguration->crankingInjectionMode = IM_SIMULTANEOUS; - setArrayValues(config->cltFuelCorrBins, CLT_CURVE_SIZE, 1); - setArrayValues(engineConfiguration->injector.battLagCorr, VBAT_INJECTOR_CURVE_SIZE, 0); + setArrayValues(config->cltFuelCorrBins, 1.0f); + setArrayValues(engineConfiguration->injector.battLagCorr, 0.0f); // this is needed to update injectorLag engine->updateSlowSensors(PASS_ENGINE_PARAMETER_SIGNATURE); @@ -228,7 +261,7 @@ void EngineTestHelper::setTriggerType(trigger_type_e trigger DECLARE_ENGINE_PARA engineConfiguration->trigger.type = trigger; incrementGlobalConfigurationVersion(PASS_ENGINE_PARAMETER_SIGNATURE); ASSERT_EQ( 1, isTriggerConfigChanged(PASS_ENGINE_PARAMETER_SIGNATURE)) << "trigger #2"; - applyTriggerShape(); + applyTriggerWaveform(); } void setupSimpleTestEngineWithMafAndTT_ONE_trigger(EngineTestHelper *eth, injection_mode_e injectionMode) { diff --git a/unit_tests/engine_test_helper.h b/unit_tests/engine_test_helper.h index 265b660c18..7522aea166 100644 --- a/unit_tests/engine_test_helper.h +++ b/unit_tests/engine_test_helper.h @@ -2,10 +2,10 @@ * @file engine_test_helper.h * * @date Jun 26, 2014 - * @author Andrey Belomutskiy, (c) 2012-2014 + * @author Andrey Belomutskiy, (c) 2012-2019 */ -#ifndef ENGINE_TEST_HELPER_H_ -#define ENGINE_TEST_HELPER_H_ + +#pragma once #include "engine.h" #include "trigger_central.h" @@ -28,7 +28,7 @@ class EngineTestHelper : public EngineTestHelperBase { public: EngineTestHelper(engine_type_e engineType); EngineTestHelper(engine_type_e engineType, configuration_callback_t boardCallback); - void applyTriggerShape(); + void applyTriggerWaveform(); void setTriggerType(trigger_type_e trigger DECLARE_ENGINE_PARAMETER_SUFFIX); void fireRise(float delayMs); void fireFall(float delayMs); @@ -47,6 +47,10 @@ public: void clearQueue(); scheduling_s * assertEvent5(const char *msg, int index, void *callback, efitime_t expectedTimestamp); + scheduling_s * assertScheduling(const char *msg, int index, scheduling_s *expected, void *callback, efitime_t expectedTimestamp); + + AngleBasedEvent * assertTriggerEvent(const char *msg, int index, AngleBasedEvent *expected, void *callback, int triggerEventIndex, angle_t angleOffsetFromTriggerEvent); + void assertEvent(const char *msg, int index, void *callback, efitime_t momentX, InjectionEvent *event); void assertInjectorUpEvent(const char *msg, int eventIndex, efitime_t momentX, long injectorIndex); void assertInjectorDownEvent(const char *msg, int eventIndex, efitime_t momentX, long injectorIndex); @@ -62,9 +66,5 @@ public: persistent_config_s persistentConfig; }; - void setupSimpleTestEngineWithMafAndTT_ONE_trigger(EngineTestHelper *eth, injection_mode_e injMode = IM_BATCH); -void setupSimpleTestEngineWithMaf(EngineTestHelper *eth, injection_mode_e injectionMode, - trigger_type_e trigger); - -#endif /* ENGINE_TEST_HELPER_H_ */ +void setupSimpleTestEngineWithMaf(EngineTestHelper *eth, injection_mode_e injectionMode, trigger_type_e trigger); diff --git a/unit_tests/global_execution_queue.cpp b/unit_tests/global_execution_queue.cpp index 4048bb00aa..7002988abc 100644 --- a/unit_tests/global_execution_queue.cpp +++ b/unit_tests/global_execution_queue.cpp @@ -30,7 +30,7 @@ int TestExecutor::size() { } scheduling_s* TestExecutor::getForUnitTest(int index) { - return schedulingQueue.getForUnitText(index); + return schedulingQueue.getElementAtIndexForUnitText(index); } void TestExecutor::scheduleByTimestamp(scheduling_s *scheduling, efitimeus_t timeUs, schfunc_t callback, void *param) { diff --git a/unit_tests/global_execution_queue.h b/unit_tests/global_execution_queue.h index 43d39da3d8..c8a605c021 100644 --- a/unit_tests/global_execution_queue.h +++ b/unit_tests/global_execution_queue.h @@ -13,8 +13,8 @@ class TestExecutor : public ExecutorInterface { public: - void scheduleByTimestamp(scheduling_s *scheduling, efitimeus_t timeUs, schfunc_t callback, void *param); - void scheduleForLater(scheduling_s *scheduling, int delayUs, schfunc_t callback, void *param); + void scheduleByTimestamp(scheduling_s *scheduling, efitimeus_t timeUs, schfunc_t callback, void *param) override; + void scheduleForLater(scheduling_s *scheduling, int delayUs, schfunc_t callback, void *param) override; void clear(); int executeAll(efitime_t now); int size(); diff --git a/unit_tests/tests/test_accel_enrichment.cpp b/unit_tests/tests/test_accel_enrichment.cpp index 00f51cfbfe..b61e1c1e7f 100644 --- a/unit_tests/tests/test_accel_enrichment.cpp +++ b/unit_tests/tests/test_accel_enrichment.cpp @@ -5,13 +5,11 @@ * * @date Apr 29, 2014 * Author: Dmitry Sidin - * Author: Andrey Belomutskiy, (c) 2012-2018 + * Author: Andrey Belomutskiy, (c) 2012-2019 */ -#include "global.h" -#include "engine_configuration.h" -#include "accel_enrichment.h" #include "engine_test_helper.h" +#include "accel_enrichment.h" #include "tps.h" TEST(fuel, testTpsAccelEnrichmentMath) { diff --git a/unit_tests/tests/test_aux_valves.cpp b/unit_tests/tests/test_aux_valves.cpp new file mode 100644 index 0000000000..3871e00ddc --- /dev/null +++ b/unit_tests/tests/test_aux_valves.cpp @@ -0,0 +1,26 @@ +/* + * @file test_aux_valves.cpp + * + * @date: Nov 23, 2019 + * @Author: Andrey Belomutskiy, (c) 2012-2019 + */ + +#include "engine_test_helper.h" +#include "aux_valves.h" + +TEST(misc, testAuxValves) { + WITH_ENGINE_TEST_HELPER(NISSAN_PRIMERA); + + engine->needTdcCallback = false; + + setupSimpleTestEngineWithMafAndTT_ONE_trigger(ð, IM_SEQUENTIAL); + engineConfiguration->isInjectionEnabled = false; + + eth.fireTriggerEvents2(2 /* count */ , 600 /* ms */); + ASSERT_EQ( 100, GET_RPM()) << "spinning-RPM#1"; + + eth.assertTriggerEvent("a0", 0, &engine->auxValves[0][0].open, (void*)&plainPinTurnOn, 7, 86); + eth.assertTriggerEvent("a1", 1, &engine->auxValves[0][1].open, (void*)&plainPinTurnOn, 3, 86); + eth.assertTriggerEvent("a2", 2, &engine->auxValves[1][0].open, (void*)&plainPinTurnOn, 1, 86); + +} diff --git a/unit_tests/tests/test_cj125.cpp b/unit_tests/tests/test_cj125.cpp index df083359a3..bfad9fe863 100644 --- a/unit_tests/tests/test_cj125.cpp +++ b/unit_tests/tests/test_cj125.cpp @@ -1,11 +1,10 @@ /* - * test_cj125.cpp + * @file test_cj125.cpp * * Created on: Jan 3, 2019 * @author Andrey Belomutskiy, (c) 2012-2019 */ -#include "gtest/gtest.h" #include "cj125_logic.h" #include "engine_test_helper.h" @@ -29,19 +28,38 @@ TEST(testCJ125, testInitialState) { WITH_ENGINE_TEST_HELPER(FORD_ASPIRE_1996); ASSERT_EQ(engine->sensors.vBatt, 0); - cj.StartHeaterControl(&applyHeaterPinState PASS_ENGINE_PARAMETER_SUFFIX); + cj.StartHeaterControl((pwm_gen_callback*)&applyHeaterPinState PASS_ENGINE_PARAMETER_SUFFIX); ASSERT_EQ(cj.heaterDuty, CJ125_HEATER_IDLE_RATE); TestSpi mock; cj.spi = &mock; - EXPECT_CALL(mock, ReadRegister(IDENT_REG_RD)).Times(1); - EXPECT_CALL(mock, ReadRegister(INIT_REG1_RD)).Times(1); - EXPECT_CALL(mock, ReadRegister(INIT_REG2_RD)).Times(1); + EXPECT_CALL(mock, ReadRegister(IDENT_REG_RD)).Times(1).WillOnce(Return(CJ125_IDENT)); + EXPECT_CALL(mock, ReadRegister(INIT_REG1_RD)).Times(1).WillOnce(Return(CJ125_INIT1_NORMAL_17)); + EXPECT_CALL(mock, ReadRegister(INIT_REG2_RD)).Times(1).WillOnce(Return(CJ125_INIT2_DIAG)); EXPECT_CALL(mock, ReadRegister(DIAG_REG_RD)).Times(1); cj.cjIdentify(); - + // validate that error state was not set + ASSERT_EQ(cj.state, CJ125_INIT); } +TEST(testCJ125, testFailedIdentify) { + CJ125 cj; + + ASSERT_EQ(cj.state, CJ125_INIT); + + TestSpi mock; + cj.spi = &mock; + + cj.cjIdentify(); + ASSERT_EQ(cj.errorCode, CJ125_ERROR_WRONG_IDENT); + ASSERT_EQ(cj.state, CJ125_ERROR); +} + +TEST(testCJ125, testMode) { + + + +} diff --git a/unit_tests/tests/test_engine_math.cpp b/unit_tests/tests/test_engine_math.cpp index 9a2d13eb57..3e35d2a9f5 100644 --- a/unit_tests/tests/test_engine_math.cpp +++ b/unit_tests/tests/test_engine_math.cpp @@ -5,9 +5,7 @@ * @author Andrey Belomutskiy, (c) 2012-2019 */ -#include "global.h" #include "engine_math.h" -#include "engine.h" #include "map.h" #include "speed_density.h" #include "engine_test_helper.h" diff --git a/unit_tests/tests/test_fasterEngineSpinningUp.cpp b/unit_tests/tests/test_fasterEngineSpinningUp.cpp index e88dad2181..fc92e1928d 100644 --- a/unit_tests/tests/test_fasterEngineSpinningUp.cpp +++ b/unit_tests/tests/test_fasterEngineSpinningUp.cpp @@ -36,7 +36,6 @@ TEST(cranking, testFasterEngineSpinningUp) { ASSERT_EQ(0, engine->executor.size()) << "plain#1"; // check all events starting from now - int timeStartUs = eth.getTimeNowUs(); // advance 1 revolution // because we have trivial TT_ONE trigger here synchronization would happen with just one rise front eth.fireRise(200); @@ -81,7 +80,6 @@ TEST(cranking, testFasterEngineSpinningUp) { eth.fireFall(60); eth.clearQueue(); - timeStartUs = eth.getTimeNowUs(); eth.fireTriggerEventsWithDuration(60); // check if the mode is now changed to 'running' at higher RPM diff --git a/unit_tests/tests/test_fuel_map.cpp b/unit_tests/tests/test_fuel_map.cpp index 43b7c72c53..4360bc4d5f 100644 --- a/unit_tests/tests/test_fuel_map.cpp +++ b/unit_tests/tests/test_fuel_map.cpp @@ -5,8 +5,6 @@ * @author Andrey Belomutskiy, (c) 2012-2019 */ -#include "global.h" -#include "engine_configuration.h" #include "fuel_math.h" #include "trigger_structure.h" #include "allsensors.h" @@ -116,7 +114,7 @@ TEST(misc, testFuelMap) { } -static void confgiureFordAspireTriggerShape(TriggerShape * s) { +static void confgiureFordAspireTriggerWaveform(TriggerWaveform * s) { s->initialize(FOUR_STROKE_CAM_SENSOR, true); s->addEvent720(53.747, T_SECONDARY, TV_RISE); @@ -165,52 +163,52 @@ TEST(misc, testAngleResolver) { engineConfiguration->globalTriggerAngleOffset = 175; - TriggerShape * ts = &engine->triggerCentral.triggerShape; - engine->eInitializeTriggerShape(NULL PASS_ENGINE_PARAMETER_SUFFIX); + TriggerWaveform * ts = &engine->triggerCentral.triggerShape; + engine->initializeTriggerWaveform(NULL PASS_ENGINE_PARAMETER_SUFFIX); assertEqualsM("index 2", 52.76, ts->eventAngles[3]); // this angle is relation to synch point assertEqualsM("time 2", 0.3233, ts->wave.getSwitchTime(2)); assertEqualsM("index 5", 412.76, ts->eventAngles[6]); assertEqualsM("time 5", 0.5733, ts->wave.getSwitchTime(5)); - ASSERT_EQ(4, ts->getTriggerShapeSynchPointIndex()); + ASSERT_EQ(4, ts->getTriggerWaveformSynchPointIndex()); ASSERT_EQ( 10, ts->getSize()) << "shape size"; event_trigger_position_s injectionStart; printf("*************************************************** testAngleResolver 0\r\n"); - TRIGGER_SHAPE(findTriggerPosition(&injectionStart, -122, engineConfiguration->globalTriggerAngleOffset)); + TRIGGER_WAVEFORM(findTriggerPosition(&injectionStart, -122, engineConfiguration->globalTriggerAngleOffset)); ASSERT_EQ( 2, injectionStart.triggerEventIndex) << "eventIndex@0"; ASSERT_NEAR(0.24, injectionStart.angleOffsetFromTriggerEvent, EPS5D); printf("*************************************************** testAngleResolver 0.1\r\n"); - TRIGGER_SHAPE(findTriggerPosition(&injectionStart, -80, engineConfiguration->globalTriggerAngleOffset)); + TRIGGER_WAVEFORM(findTriggerPosition(&injectionStart, -80, engineConfiguration->globalTriggerAngleOffset)); ASSERT_EQ( 2, injectionStart.triggerEventIndex) << "eventIndex@0"; ASSERT_FLOAT_EQ(42.24, injectionStart.angleOffsetFromTriggerEvent); printf("*************************************************** testAngleResolver 0.2\r\n"); - TRIGGER_SHAPE(findTriggerPosition(&injectionStart, -54, engineConfiguration->globalTriggerAngleOffset)); + TRIGGER_WAVEFORM(findTriggerPosition(&injectionStart, -54, engineConfiguration->globalTriggerAngleOffset)); ASSERT_EQ( 2, injectionStart.triggerEventIndex) << "eventIndex@0"; ASSERT_FLOAT_EQ(68.2400, injectionStart.angleOffsetFromTriggerEvent); printf("*************************************************** testAngleResolver 0.3\r\n"); - TRIGGER_SHAPE(findTriggerPosition(&injectionStart, -53, engineConfiguration->globalTriggerAngleOffset)); + TRIGGER_WAVEFORM(findTriggerPosition(&injectionStart, -53, engineConfiguration->globalTriggerAngleOffset)); ASSERT_EQ(2, injectionStart.triggerEventIndex); ASSERT_FLOAT_EQ(69.24, injectionStart.angleOffsetFromTriggerEvent); printf("*************************************************** testAngleResolver 1\r\n"); - TRIGGER_SHAPE(findTriggerPosition(&injectionStart, 0, engineConfiguration->globalTriggerAngleOffset)); + TRIGGER_WAVEFORM(findTriggerPosition(&injectionStart, 0, engineConfiguration->globalTriggerAngleOffset)); ASSERT_EQ(2, injectionStart.triggerEventIndex); ASSERT_FLOAT_EQ(122.24, injectionStart.angleOffsetFromTriggerEvent); printf("*************************************************** testAngleResolver 2\r\n"); - TRIGGER_SHAPE(findTriggerPosition(&injectionStart, 56, engineConfiguration->globalTriggerAngleOffset)); + TRIGGER_WAVEFORM(findTriggerPosition(&injectionStart, 56, engineConfiguration->globalTriggerAngleOffset)); ASSERT_EQ(2, injectionStart.triggerEventIndex); ASSERT_FLOAT_EQ(178.24, injectionStart.angleOffsetFromTriggerEvent); - TriggerShape t; - confgiureFordAspireTriggerShape(&t); + TriggerWaveform t; + confgiureFordAspireTriggerWaveform(&t); } TEST(misc, testPinHelper) { @@ -233,7 +231,7 @@ TEST(fuel, testTpsBasedVeDefect799) { int mapFrom = 100; // set MAP axis range - setLinearCurve(config->veLoadBins, FUEL_LOAD_COUNT, mapFrom, mapFrom + FUEL_LOAD_COUNT - 1, 1); + setLinearCurve(config->veLoadBins, mapFrom, mapFrom + FUEL_LOAD_COUNT - 1, 1); // RPM does not matter - set table values to match load axis for (int load = 0; load < FUEL_LOAD_COUNT;load++) { @@ -246,7 +244,7 @@ TEST(fuel, testTpsBasedVeDefect799) { ASSERT_EQ(107, veMap.getValue(2000, 107)); // set TPS axis range which does not overlap MAP range for this test - setLinearCurve(CONFIG(ignitionTpsBins), IGN_TPS_COUNT, 0, 15, 1); + setLinearCurve(CONFIG(ignitionTpsBins), 0, 15, 1); engine->mockMapValue = 107; diff --git a/unit_tests/tests/test_gpiochip.cpp b/unit_tests/tests/test_gpiochip.cpp index 98172d2909..eaa00411fc 100644 --- a/unit_tests/tests/test_gpiochip.cpp +++ b/unit_tests/tests/test_gpiochip.cpp @@ -42,6 +42,7 @@ static int calls_to_failed_chip = 0; static int testchip_failed_writePad(void *data, brain_pin_e pin, int value) { calls_to_failed_chip++; + return 0; } static int testchip_failed_init(void *data) @@ -123,24 +124,24 @@ TEST(gpioext, testGpioExt) { EXPECT_EQ(2, initcalls); /* gpio reads */ - EXPECT_TRUE(gpiochips_readPad(chip1_base + 0) == 0); - EXPECT_TRUE(gpiochips_readPad(chip1_base + 1) != 0); + EXPECT_TRUE(gpiochips_readPad((brain_pin_e)(chip1_base + 0)) == 0); + EXPECT_TRUE(gpiochips_readPad((brain_pin_e)(chip1_base + 1)) != 0); /* gpio write */ - gpiochips_writePad(chip2_base + 0, 0); - gpiochips_writePad(chip2_base + 1, 1); + gpiochips_writePad((brain_pin_e)(chip2_base + 0), 0); + gpiochips_writePad((brain_pin_e)(chip2_base + 1), 1); EXPECT_EQ(0x02, io_state); /* try to access failed chip */ - EXPECT_FALSE(gpiochips_writePad(chip3_base + 0, 0) >= 0); - EXPECT_FALSE(gpiochips_writePad(chip3_base + 1, 1) >= 0); + EXPECT_FALSE(gpiochips_writePad((brain_pin_e)(chip3_base + 0), 0) >= 0); + EXPECT_FALSE(gpiochips_writePad((brain_pin_e)(chip3_base + 1), 1) >= 0); EXPECT_EQ(0, calls_to_failed_chip); /* read/write outside range */ - EXPECT_TRUE(gpiochips_readPad(chip1_base - 1) < 0); - EXPECT_TRUE(gpiochips_writePad(chip1_base - 1, 1) < 0); + EXPECT_TRUE(gpiochips_readPad((brain_pin_e)(chip1_base - 1)) < 0); + EXPECT_TRUE(gpiochips_writePad((brain_pin_e)(chip1_base - 1), 1) < 0); - EXPECT_TRUE(gpiochips_readPad(chip3_base + 16) < 0); - EXPECT_TRUE(gpiochips_writePad(chip3_base + 16, 1) < 0); + EXPECT_TRUE(gpiochips_readPad((brain_pin_e)(chip3_base + 16)) < 0); + EXPECT_TRUE(gpiochips_writePad((brain_pin_e)(chip3_base + 16), 1) < 0); } diff --git a/unit_tests/tests/test_ignition_scheduling.cpp b/unit_tests/tests/test_ignition_scheduling.cpp index 500c8297de..f2a9535f4f 100644 --- a/unit_tests/tests/test_ignition_scheduling.cpp +++ b/unit_tests/tests/test_ignition_scheduling.cpp @@ -26,14 +26,14 @@ TEST(ignition, twoCoils) { engine->engineState.timingAdvance = 0; initializeIgnitionActions(PASS_ENGINE_PARAMETER_SIGNATURE); - ASSERT_EQ(engine->ignitionEvents.elements[0].advance, 0); + ASSERT_EQ(engine->ignitionEvents.elements[0].sparkAngle, 0); ASSERT_EQ((void*)engine->ignitionEvents.elements[0].outputs[0], (void*)&enginePins.coils[0]); - ASSERT_EQ(engine->ignitionEvents.elements[1].advance, 720 / 12); + ASSERT_EQ(engine->ignitionEvents.elements[1].sparkAngle, 720 / 12); ASSERT_EQ((void*)engine->ignitionEvents.elements[1].outputs[0], (void*)&enginePins.coils[6]); - ASSERT_EQ(engine->ignitionEvents.elements[3].advance, 3 * 720 / 12); + ASSERT_EQ(engine->ignitionEvents.elements[3].sparkAngle, 3 * 720 / 12); ASSERT_EQ((void*)engine->ignitionEvents.elements[3].outputs[0], (void*)&enginePins.coils[6]); diff --git a/unit_tests/tests/test_logic_expression.cpp b/unit_tests/tests/test_logic_expression.cpp index 59003b9fac..96c024528e 100644 --- a/unit_tests/tests/test_logic_expression.cpp +++ b/unit_tests/tests/test_logic_expression.cpp @@ -7,7 +7,6 @@ * @author Andrey Belomutskiy, (c) 2012-2018 */ -#include "global.h" #include "fsio_impl.h" #include "cli_registry.h" #include "engine_test_helper.h" @@ -229,7 +228,7 @@ TEST(fsio, testLogicExpressions) { engine->fsioState.mockCrankingRpm = 200; testExpression2(0, "rpm", 900, engine); testExpression2(0, "cranking_rpm", 200, engine); - testExpression2(0, STARTER_BLOCK, 0, engine); + testExpression2(0, STARTER_RELAY_LOGIC, 0, engine); testExpression2(0, "rpm cranking_rpm > ", 1, engine); } } diff --git a/unit_tests/tests/test_on_demand_parameters.cpp b/unit_tests/tests/test_on_demand_parameters.cpp index 0c8f95420b..a6372a7d65 100644 --- a/unit_tests/tests/test_on_demand_parameters.cpp +++ b/unit_tests/tests/test_on_demand_parameters.cpp @@ -47,8 +47,9 @@ TEST(util, checkForMissingParameterHandling) { FAIL() << "Expected 'missing key3' exception"; } catch(string message) { // exception about missing value is expected - ASSERT_TRUE(message.find("No value for this key") >= 0); - ASSERT_TRUE(message.find("key3") >= 0); + // type limits this to always be not negative + // todo? do we need this? ASSERT_TRUE(message.find("No value for this key") >= 0); + // todo? do we need this? ASSERT_TRUE(message.find("key3") >= 0); } } diff --git a/unit_tests/tests/test_pwm_generator.cpp b/unit_tests/tests/test_pwm_generator.cpp index c866968185..7d48e4aac1 100644 --- a/unit_tests/tests/test_pwm_generator.cpp +++ b/unit_tests/tests/test_pwm_generator.cpp @@ -18,7 +18,7 @@ static int expectedTimeOfNextEvent; static int pinValue = -1; static void testApplyPinState(int stateIndex, PwmConfig *state) /* pwm_gen_callback */ { - pinValue = state->multiWave.getChannelState(/*channelIndex*/0, stateIndex); + pinValue = state->multiChannelStateSequence.getChannelState(/*channelIndex*/0, stateIndex); printf("PWM_test: setPinValue=%d @ timeNow=%d\r\n", pinValue, timeNowUs); } @@ -52,7 +52,7 @@ static void test100dutyCycle() { &pin, 1000 /* frequency */, 1.0 /* duty cycle */, - &testApplyPinState); + (pwm_gen_callback*)&testApplyPinState); expectedTimeOfNextEvent += 1000; assertEqualsM2("1@1000/100", expectedTimeOfNextEvent, executor.getForUnitTest(0)->momentX, 0); @@ -79,7 +79,7 @@ static void testSwitchToNanPeriod() { &pin, 1000 /* frequency */, 0.60 /* duty cycle */, - &testApplyPinState); + (pwm_gen_callback*)&testApplyPinState); expectedTimeOfNextEvent += 600; assertEqualsM2("1@1000/70", expectedTimeOfNextEvent, executor.getForUnitTest(0)->momentX, 0); @@ -118,7 +118,7 @@ TEST(misc, testPwmGenerator) { &pin, 1000 /* frequency */, 0.80 /* duty cycle */, - &testApplyPinState); + (pwm_gen_callback*)&testApplyPinState); expectedTimeOfNextEvent += 800; diff --git a/unit_tests/tests/test_signal_executor.cpp b/unit_tests/tests/test_signal_executor.cpp index f40e49b051..3c35b17759 100644 --- a/unit_tests/tests/test_signal_executor.cpp +++ b/unit_tests/tests/test_signal_executor.cpp @@ -108,9 +108,9 @@ TEST(misc, testSignalExecutor) { ASSERT_EQ(4, eq.size()); ASSERT_EQ(10, eq.getHead()->momentX); - ASSERT_EQ(10, eq.getHead()->next->momentX); - ASSERT_EQ(11, eq.getHead()->next->next->momentX); - ASSERT_EQ(12, eq.getHead()->next->next->next->momentX); + ASSERT_EQ(10, eq.getHead()->nextScheduling_s->momentX); + ASSERT_EQ(11, eq.getHead()->nextScheduling_s->nextScheduling_s->momentX); + ASSERT_EQ(12, eq.getHead()->nextScheduling_s->nextScheduling_s->nextScheduling_s->momentX); callbackCounter = 0; eq.executeAll(10); diff --git a/unit_tests/tests/test_speed_density.cpp b/unit_tests/tests/test_speed_density.cpp index 683ad7b743..d91a39348d 100644 --- a/unit_tests/tests/test_speed_density.cpp +++ b/unit_tests/tests/test_speed_density.cpp @@ -5,7 +5,6 @@ * @author Andrey Belomutskiy, (c) 2012-2018 */ -#include "global.h" #include "engine_test_helper.h" #include "speed_density.h" @@ -14,7 +13,7 @@ TEST(big, testSpeedDensity) { WITH_ENGINE_TEST_HELPER(FORD_INLINE_6_1995); engineConfiguration->trigger.customTotalToothCount = 8; - eth.applyTriggerShape(); + eth.applyTriggerWaveform(); eth.fireTriggerEvents(36); ASSERT_EQ( 1500, GET_RPM()) << "RPM"; diff --git a/unit_tests/tests/test_trigger_decoder.cpp b/unit_tests/tests/test_trigger_decoder.cpp index 214478e4f9..7908947e6c 100644 --- a/unit_tests/tests/test_trigger_decoder.cpp +++ b/unit_tests/tests/test_trigger_decoder.cpp @@ -49,7 +49,7 @@ static int getTriggerZeroEventIndex(engine_type_e engineType) { initDataStructures(PASS_ENGINE_PARAMETER_SIGNATURE); - TriggerShape * shape = ð.engine.triggerCentral.triggerShape; + TriggerWaveform * shape = ð.engine.triggerCentral.triggerShape; return findTriggerZeroEventIndex(ð.engine.triggerCentral.triggerState, shape, &engineConfiguration->trigger PASS_ENGINE_PARAMETER_SUFFIX); } @@ -60,8 +60,8 @@ static void testDodgeNeonDecoder(void) { WITH_ENGINE_TEST_HELPER(DODGE_NEON_1995); - TriggerShape * shape = ð.engine.triggerCentral.triggerShape; - ASSERT_EQ(8, shape->getTriggerShapeSynchPointIndex()); + TriggerWaveform * shape = ð.engine.triggerCentral.triggerShape; + ASSERT_EQ(8, shape->getTriggerWaveformSynchPointIndex()); TriggerState state; @@ -118,28 +118,28 @@ TEST(misc, testSomethingWeird) { ASSERT_FALSE(sta->shaft_is_synchronized) << "shaft_is_synchronized"; int r = 10; - sta->decodeTriggerEvent(SHAFT_PRIMARY_FALLING, r PASS_ENGINE_PARAMETER_SUFFIX); + sta->decodeTriggerEvent(nullptr, /* override */ nullptr,SHAFT_PRIMARY_FALLING, r PASS_ENGINE_PARAMETER_SUFFIX); ASSERT_FALSE(sta->shaft_is_synchronized) << "shaft_is_synchronized"; // still no synchronization - sta->decodeTriggerEvent(SHAFT_PRIMARY_RISING, ++r PASS_ENGINE_PARAMETER_SUFFIX); + sta->decodeTriggerEvent(nullptr, /* override */ nullptr,SHAFT_PRIMARY_RISING, ++r PASS_ENGINE_PARAMETER_SUFFIX); ASSERT_TRUE(sta->shaft_is_synchronized); // first signal rise synchronize ASSERT_EQ(0, sta->getCurrentIndex()); - sta->decodeTriggerEvent(SHAFT_PRIMARY_FALLING, r++ PASS_ENGINE_PARAMETER_SUFFIX); + sta->decodeTriggerEvent(nullptr, /* override */ nullptr,SHAFT_PRIMARY_FALLING, r++ PASS_ENGINE_PARAMETER_SUFFIX); ASSERT_EQ(1, sta->getCurrentIndex()); for (int i = 2; i < 10;) { - sta->decodeTriggerEvent(SHAFT_PRIMARY_RISING, r++ PASS_ENGINE_PARAMETER_SUFFIX); + sta->decodeTriggerEvent(nullptr, /* override */ nullptr,SHAFT_PRIMARY_RISING, r++ PASS_ENGINE_PARAMETER_SUFFIX); assertEqualsM("even", i++, sta->getCurrentIndex()); - sta->decodeTriggerEvent(SHAFT_PRIMARY_FALLING, r++ PASS_ENGINE_PARAMETER_SUFFIX); + sta->decodeTriggerEvent(nullptr, /* override */ nullptr,SHAFT_PRIMARY_FALLING, r++ PASS_ENGINE_PARAMETER_SUFFIX); assertEqualsM("odd", i++, sta->getCurrentIndex()); } - sta->decodeTriggerEvent(SHAFT_PRIMARY_RISING, r++ PASS_ENGINE_PARAMETER_SUFFIX); + sta->decodeTriggerEvent(nullptr, /* override */ nullptr,SHAFT_PRIMARY_RISING, r++ PASS_ENGINE_PARAMETER_SUFFIX); ASSERT_EQ(10, sta->getCurrentIndex()); - sta->decodeTriggerEvent(SHAFT_PRIMARY_FALLING, r++ PASS_ENGINE_PARAMETER_SUFFIX); + sta->decodeTriggerEvent(nullptr, /* override */ nullptr,SHAFT_PRIMARY_FALLING, r++ PASS_ENGINE_PARAMETER_SUFFIX); ASSERT_EQ(11, sta->getCurrentIndex()); - sta->decodeTriggerEvent(SHAFT_PRIMARY_RISING, r++ PASS_ENGINE_PARAMETER_SUFFIX); + sta->decodeTriggerEvent(nullptr, /* override */ nullptr,SHAFT_PRIMARY_RISING, r++ PASS_ENGINE_PARAMETER_SUFFIX); ASSERT_EQ(0, sta->getCurrentIndex()); // new revolution } @@ -151,22 +151,22 @@ TEST(misc, test1995FordInline6TriggerDecoder) { WITH_ENGINE_TEST_HELPER(FORD_INLINE_6_1995); - TriggerShape * shape = &engine->triggerCentral.triggerShape; + TriggerWaveform * shape = &engine->triggerCentral.triggerShape; - ASSERT_EQ( 0, shape->getTriggerShapeSynchPointIndex()) << "triggerShapeSynchPointIndex"; + ASSERT_EQ( 0, shape->getTriggerWaveformSynchPointIndex()) << "triggerShapeSynchPointIndex"; event_trigger_position_s position; ASSERT_EQ( 0, engineConfiguration->globalTriggerAngleOffset) << "globalTriggerAngleOffset"; - TRIGGER_SHAPE(findTriggerPosition(&position, 0, engineConfiguration->globalTriggerAngleOffset)); + TRIGGER_WAVEFORM(findTriggerPosition(&position, 0, engineConfiguration->globalTriggerAngleOffset)); assertTriggerPosition(&position, 0, 0); - TRIGGER_SHAPE(findTriggerPosition(&position, 200, engineConfiguration->globalTriggerAngleOffset)); + TRIGGER_WAVEFORM(findTriggerPosition(&position, 200, engineConfiguration->globalTriggerAngleOffset)); assertTriggerPosition(&position, 3, 20); - TRIGGER_SHAPE(findTriggerPosition(&position, 360, engineConfiguration->globalTriggerAngleOffset)); + TRIGGER_WAVEFORM(findTriggerPosition(&position, 360, engineConfiguration->globalTriggerAngleOffset)); assertTriggerPosition(&position, 6, 0); - eth.applyTriggerShape(); + eth.applyTriggerWaveform(); engine->periodicFastCallback(PASS_ENGINE_PARAMETER_SIGNATURE); eth.fireTriggerEvents(48); @@ -203,7 +203,7 @@ TEST(misc, testFordAspire) { WITH_ENGINE_TEST_HELPER(FORD_ASPIRE_1996); - ASSERT_EQ( 4, TRIGGER_SHAPE(getTriggerShapeSynchPointIndex())) << "getTriggerShapeSynchPointIndex"; + ASSERT_EQ( 4, TRIGGER_WAVEFORM(getTriggerWaveformSynchPointIndex())) << "getTriggerWaveformSynchPointIndex"; ASSERT_EQ(800, config->fuelRpmBins[0]); ASSERT_EQ(7000, config->fuelRpmBins[15]); @@ -228,11 +228,11 @@ static void testTriggerDecoder2(const char *msg, engine_type_e type, int synchPo WITH_ENGINE_TEST_HELPER(type); - TriggerShape *t = &ENGINE(triggerCentral.triggerShape); + TriggerWaveform *t = &ENGINE(triggerCentral.triggerShape); ASSERT_FALSE(t->shapeDefinitionError) << "isError"; - assertEqualsM("synchPointIndex", synchPointIndex, t->getTriggerShapeSynchPointIndex()); + assertEqualsM("synchPointIndex", synchPointIndex, t->getTriggerWaveformSynchPointIndex()); ASSERT_NEAR(channel1duty, t->expectedDutyCycle[0], 0.0001) << msg << " channel1duty"; ASSERT_NEAR(channel2duty, t->expectedDutyCycle[1], 0.0001) << msg << " channel2duty"; @@ -307,7 +307,7 @@ TEST(misc, testRpmCalculator) { engineConfiguration->trigger.customTotalToothCount = 8; engineConfiguration->globalFuelCorrection = 3; - eth.applyTriggerShape(); + eth.applyTriggerWaveform(); setFlatInjectorLag(0 PASS_CONFIG_PARAMETER_SUFFIX); @@ -318,8 +318,8 @@ TEST(misc, testRpmCalculator) { ASSERT_EQ(0, GET_RPM()); // triggerIndexByAngle update is now fixed! prepareOutputSignals() wasn't reliably called - ASSERT_EQ(5, TRIGGER_SHAPE(triggerIndexByAngle[240])); - ASSERT_EQ(5, TRIGGER_SHAPE(triggerIndexByAngle[241])); + ASSERT_EQ(5, TRIGGER_WAVEFORM(triggerIndexByAngle[240])); + ASSERT_EQ(5, TRIGGER_WAVEFORM(triggerIndexByAngle[241])); eth.fireTriggerEvents(/* count */ 48); @@ -351,7 +351,7 @@ TEST(misc, testRpmCalculator) { assertEqualsM("fuel #2", 4.5450, engine->injectionDuration); assertEqualsM("one degree", 111.1111, engine->rpmCalculator.oneDegreeUs); ASSERT_EQ( 1, ilist->isReady) << "size #2"; - ASSERT_EQ( 0, ilist->elements[0].dwellPosition.triggerEventAngle) << "dwell angle"; + ASSERT_EQ( 0, ilist->elements[0].dwellPosition.triggerEventIndex) << "dwell @ index"; assertEqualsM("dwell offset", 8.5, ilist->elements[0].dwellPosition.angleOffsetFromTriggerEvent); ASSERT_EQ( 0, eth.engine.triggerCentral.triggerState.getCurrentIndex()) << "index #2"; @@ -359,14 +359,14 @@ TEST(misc, testRpmCalculator) { { scheduling_s *ev0 = engine->executor.getForUnitTest(0); - assertREqualsM("Call@0", (void*)ev0->callback, (void*)turnSparkPinHigh); + assertREqualsM("Call@0", (void*)ev0->action.getCallback(), (void*)turnSparkPinHigh); assertEqualsM("ev 0", start + 944, ev0->momentX); - assertEqualsLM("coil 0", (long)&enginePins.coils[0], (long)((IgnitionEvent*)ev0->param)->outputs[0]); + assertEqualsLM("coil 0", (long)&enginePins.coils[0], (long)((IgnitionEvent*)ev0->action.getArgument())->outputs[0]); scheduling_s *ev1 = engine->executor.getForUnitTest(1); - assertREqualsM("Call@1", (void*)ev1->callback, (void*)fireSparkAndPrepareNextSchedule); + assertREqualsM("Call@1", (void*)ev1->action.getCallback(), (void*)fireSparkAndPrepareNextSchedule); assertEqualsM("ev 1", start + 1444, ev1->momentX); - assertEqualsLM("coil 1", (long)&enginePins.coils[0], (long)((IgnitionEvent*)ev1->param)->outputs[0]); + assertEqualsLM("coil 1", (long)&enginePins.coils[0], (long)((IgnitionEvent*)ev1->action.getArgument())->outputs[0]); } @@ -382,8 +382,8 @@ TEST(misc, testRpmCalculator) { assertEqualsM("3/3", start + 14777, engine->executor.getForUnitTest(2)->momentX); engine->executor.clear(); - ASSERT_EQ(5, TRIGGER_SHAPE(triggerIndexByAngle[240])); - ASSERT_EQ(5, TRIGGER_SHAPE(triggerIndexByAngle[241])); + ASSERT_EQ(5, TRIGGER_WAVEFORM(triggerIndexByAngle[240])); + ASSERT_EQ(5, TRIGGER_WAVEFORM(triggerIndexByAngle[241])); eth.fireFall(5); @@ -448,7 +448,7 @@ TEST(misc, testTriggerDecoder) { persistent_config_s c; Engine e(&c); - TriggerShape * s = &e.triggerCentral.triggerShape; + TriggerWaveform * s = &e.triggerCentral.triggerShape; persistent_config_s *config = &c; @@ -457,7 +457,7 @@ TEST(misc, testTriggerDecoder) { engine_configuration_s *engineConfiguration = &c.engineConfiguration; board_configuration_s *boardConfiguration = &c.engineConfiguration.bc; - initializeSkippedToothTriggerShapeExt(s, 2, 0, FOUR_STROKE_CAM_SENSOR); + initializeSkippedToothTriggerWaveformExt(s, 2, 0, FOUR_STROKE_CAM_SENSOR); assertEqualsM("shape size", s->getSize(), 4); ASSERT_EQ(s->wave.switchTimes[0], 0.25); ASSERT_EQ(s->wave.switchTimes[1], 0.5); @@ -507,7 +507,7 @@ TEST(misc, testTriggerDecoder) { WITH_ENGINE_TEST_HELPER(MITSU_4G93); -// TriggerShape *t = ð.engine.triggerShape; +// TriggerWaveform *t = ð.engine.triggerShape; // ASSERT_EQ(1, t->eventAngles[1]); // ASSERT_EQ( 0, t->triggerIndexByAngle[56]) << "index at 0"; // ASSERT_EQ( 1, t->triggerIndexByAngle[57]) << "index at 1"; @@ -691,6 +691,12 @@ static void assertInjectors(const char *msg, int value0, int value1) { assertEqualsM4(msg, "inj#1", value1, enginePins.injectors[1].currentLogicValue); } +static void setArray(float* p, size_t count, float value) { + while (count--) { + *p++ = value; + } +} + void doTestFuelSchedulerBug299smallAndMedium(int startUpDelayMs) { printf("*************************************************** testFuelSchedulerBug299 small to medium\r\n"); @@ -705,8 +711,9 @@ void doTestFuelSchedulerBug299smallAndMedium(int startUpDelayMs) { int engineLoadIndex = findIndex(config->fuelLoadBins, FUEL_LOAD_COUNT, testMafValue); ASSERT_EQ(8, engineLoadIndex); - setArrayValues(fuelMap.pointers[engineLoadIndex], FUEL_RPM_COUNT, 25); - setArrayValues(fuelMap.pointers[engineLoadIndex + 1], FUEL_RPM_COUNT, 25); + setArray(fuelMap.pointers[engineLoadIndex], FUEL_RPM_COUNT, 25); + setArray(fuelMap.pointers[engineLoadIndex + 1], FUEL_RPM_COUNT, 25); + engine->periodicFastCallback(PASS_ENGINE_PARAMETER_SIGNATURE); ASSERT_FLOAT_EQ(12.5, engine->injectionDuration) << "fuel#2_0"; @@ -866,8 +873,8 @@ void doTestFuelSchedulerBug299smallAndMedium(int startUpDelayMs) { assertInjectionEvent("#2#", &t->elements[2], 0, 1, 315); assertInjectionEvent("#3#", &t->elements[3], 1, 0, 45 + 90); - setArrayValues(fuelMap.pointers[engineLoadIndex], FUEL_RPM_COUNT, 35); - setArrayValues(fuelMap.pointers[engineLoadIndex + 1], FUEL_RPM_COUNT, 35); + setArray(fuelMap.pointers[engineLoadIndex], FUEL_RPM_COUNT, 35); + setArray(fuelMap.pointers[engineLoadIndex + 1], FUEL_RPM_COUNT, 35); engine->periodicFastCallback(PASS_ENGINE_PARAMETER_SIGNATURE); assertEqualsM("fuel#3", 17.5, engine->injectionDuration); // duty cycle above 75% is a special use-case because 'special' fuel event overlappes the next normal event in batch mode @@ -957,8 +964,8 @@ TEST(big, testDifferentInjectionModes) { // set fuel map values - extract method? int engineLoadIndex = findIndex(config->fuelLoadBins, FUEL_LOAD_COUNT, testMafValue); ASSERT_EQ(8, engineLoadIndex); - setArrayValues(fuelMap.pointers[engineLoadIndex], FUEL_RPM_COUNT, 40); - setArrayValues(fuelMap.pointers[engineLoadIndex + 1], FUEL_RPM_COUNT, 40); + setArray(fuelMap.pointers[engineLoadIndex], FUEL_RPM_COUNT, 40); + setArray(fuelMap.pointers[engineLoadIndex + 1], FUEL_RPM_COUNT, 40); engine->periodicFastCallback(PASS_ENGINE_PARAMETER_SIGNATURE); assertEqualsM("injectionMode IM_BATCH", (int)IM_BATCH, (int)engineConfiguration->injectionMode); @@ -988,8 +995,8 @@ TEST(big, testFuelSchedulerBug299smallAndLarge) { // set fuel map values - extract method? int engineLoadIndex = findIndex(config->fuelLoadBins, FUEL_LOAD_COUNT, testMafValue); ASSERT_EQ(8, engineLoadIndex); - setArrayValues(fuelMap.pointers[engineLoadIndex], FUEL_RPM_COUNT, 35); - setArrayValues(fuelMap.pointers[engineLoadIndex + 1], FUEL_RPM_COUNT, 35); + setArray(fuelMap.pointers[engineLoadIndex], FUEL_RPM_COUNT, 35); + setArray(fuelMap.pointers[engineLoadIndex + 1], FUEL_RPM_COUNT, 35); engine->periodicFastCallback(PASS_ENGINE_PARAMETER_SIGNATURE); ASSERT_FLOAT_EQ(17.5, engine->injectionDuration) << "Lfuel#2_1"; @@ -1052,8 +1059,8 @@ TEST(big, testFuelSchedulerBug299smallAndLarge) { eth.executeActions(); ASSERT_EQ( 0, engine->executor.size()) << "Lqs#04"; - setArrayValues(fuelMap.pointers[engineLoadIndex], FUEL_RPM_COUNT, 4); - setArrayValues(fuelMap.pointers[engineLoadIndex + 1], FUEL_RPM_COUNT, 4); + setArray(fuelMap.pointers[engineLoadIndex], FUEL_RPM_COUNT, 4); + setArray(fuelMap.pointers[engineLoadIndex + 1], FUEL_RPM_COUNT, 4); engine->periodicFastCallback(PASS_ENGINE_PARAMETER_SIGNATURE); ASSERT_EQ( 2, engine->injectionDuration) << "Lfuel#4"; diff --git a/unit_tests/tests/test_trigger_multi_sync.cpp b/unit_tests/tests/test_trigger_multi_sync.cpp index 87542c8a8a..1d8ad39258 100644 --- a/unit_tests/tests/test_trigger_multi_sync.cpp +++ b/unit_tests/tests/test_trigger_multi_sync.cpp @@ -9,7 +9,7 @@ #include "trigger_mazda.h" TEST(trigger, miataNA) { - TriggerShape naShape; + TriggerWaveform naShape; initializeMazdaMiataNaShape(&naShape); diff --git a/unit_tests/tests/test_trigger_noiseless.cpp b/unit_tests/tests/test_trigger_noiseless.cpp index f206cf3bf7..285394492b 100644 --- a/unit_tests/tests/test_trigger_noiseless.cpp +++ b/unit_tests/tests/test_trigger_noiseless.cpp @@ -84,7 +84,7 @@ static void fireNoisyCycle60_2(EngineTestHelper *eth, int numCycles, int duratio } static void resetTrigger(EngineTestHelper ð) { - eth.applyTriggerShape(); + eth.applyTriggerWaveform(); eth.engine.triggerCentral.resetAccumSignalData(); // reset error counter eth.engine.triggerCentral.triggerState.totalTriggerErrorCounter = 0; diff --git a/unit_tests/tests/tests.mk b/unit_tests/tests/tests.mk index c7b3e3866d..dc6e721b4f 100644 --- a/unit_tests/tests/tests.mk +++ b/unit_tests/tests/tests.mk @@ -1,6 +1,7 @@ TESTS_SRC_CPP = \ tests/test_util.cpp \ tests/test_ion.cpp \ + tests/test_aux_valves.cpp \ tests/test_on_demand_parameters.cpp \ tests/test_hip9011.cpp \ tests/test_cj125.cpp \ diff --git a/unit_tests/unit_test_framework.h b/unit_tests/unit_test_framework.h index fd380ef299..5c0f3788fe 100644 --- a/unit_tests/unit_test_framework.h +++ b/unit_tests/unit_test_framework.h @@ -11,6 +11,7 @@ #include "engine.h" #include "gtest/gtest.h" #include "gmock/gmock.h" +using ::testing::Return; // This lets us inspect private state from unit tests #define private public